为什么日志方法的位置在项目反应器中无关紧要
why log method's position doesn't matter in project reactor
我有以下代码,其中 log()
方法在两个不同的地方被调用。但是在这两种情况下生成的日志输出是相同的。
Mono mono1 = Mono.just("vashishth").log().map( s -> s.toUpperCase(Locale.ROOT));
mono1.subscribe(name -> log.info(name.toString()));
Mono mono2 = Mono.just("vashishth").map(s -> s.toUpperCase(Locale.ROOT)).log();
mono2.subscribe(name -> log.info(name.toString()));
log()
方法文档说 观察所有 Reactive Streams 信号 。这到底是什么意思,为什么 log() 方法调用不影响日志输出?
如其所说 Observe all Reactive Streams signals
.
所以是的,这到底是什么意思。要知道我们需要知道反应链是如何工作的。
log
不是您所期望的,它不是链的那个特定部分中的 System.out.prinln
。您放置 log
语句的位置实际上并不重要。
那么什么是signal
。好吧,只要您使用 Mono
,您基本上就是在告诉 whenever i have a value in this mono please call the next operator in the chain
(在您的情况下,下一个运算符是 map
)。那么我们怎么知道我们在Mono
中有一个值呢?好吧,就是这样。当有值时,单声道将 发出信号 。
在高层次上,您可以说当 Mono
获得其值时,它将发出信号 next
,然后这将告诉 map
调用 Mono
调用 onNext
。
所以操作员们在互相交谈
所以步骤例如:
- 价值落在单声道
- 单声道信号
next
并提供值
map
然后调用 onNext
到 运行 它根据 Mono
提供的值的逻辑
这就是所谓的反应链,因为每一步都在与下一步对话。当您添加 log
语句时,您会看到不同操作员之间的所有对话。正如文档所说,你可以看到 all 对话,所以无论你把它放在哪里,你总是会看到第一个操作员的所有对话,直到最后一个.
当你声明类似
的东西时
Mono.just("foobar").map(s -> s.toUppercase()).subscribe(System::out::println);
你没有声明信令。它在您不知情的情况下发生在“幕后”。但是当您将 log
添加到链中时,您会在日志中看到它。
我有以下代码,其中 log()
方法在两个不同的地方被调用。但是在这两种情况下生成的日志输出是相同的。
Mono mono1 = Mono.just("vashishth").log().map( s -> s.toUpperCase(Locale.ROOT));
mono1.subscribe(name -> log.info(name.toString()));
Mono mono2 = Mono.just("vashishth").map(s -> s.toUpperCase(Locale.ROOT)).log();
mono2.subscribe(name -> log.info(name.toString()));
log()
方法文档说 观察所有 Reactive Streams 信号 。这到底是什么意思,为什么 log() 方法调用不影响日志输出?
如其所说 Observe all Reactive Streams signals
.
所以是的,这到底是什么意思。要知道我们需要知道反应链是如何工作的。
log
不是您所期望的,它不是链的那个特定部分中的 System.out.prinln
。您放置 log
语句的位置实际上并不重要。
那么什么是signal
。好吧,只要您使用 Mono
,您基本上就是在告诉 whenever i have a value in this mono please call the next operator in the chain
(在您的情况下,下一个运算符是 map
)。那么我们怎么知道我们在Mono
中有一个值呢?好吧,就是这样。当有值时,单声道将 发出信号 。
在高层次上,您可以说当 Mono
获得其值时,它将发出信号 next
,然后这将告诉 map
调用 Mono
调用 onNext
。
所以操作员们在互相交谈 所以步骤例如:
- 价值落在单声道
- 单声道信号
next
并提供值 map
然后调用onNext
到 运行 它根据Mono
提供的值的逻辑
这就是所谓的反应链,因为每一步都在与下一步对话。当您添加 log
语句时,您会看到不同操作员之间的所有对话。正如文档所说,你可以看到 all 对话,所以无论你把它放在哪里,你总是会看到第一个操作员的所有对话,直到最后一个.
当你声明类似
的东西时Mono.just("foobar").map(s -> s.toUppercase()).subscribe(System::out::println);
你没有声明信令。它在您不知情的情况下发生在“幕后”。但是当您将 log
添加到链中时,您会在日志中看到它。