根据 As of SLF4J version 1.8.0, the static binder mechanism (StaticLoggerBinder) is deprecated.
This class exists for backward compatibility earlier versions of slf4j-api.jar, in particular in the 1.6.x and the 1.7.x series.
Note that this class is likely to be removed in future releases of SLF4J.
这本书,我得到了一个非常简单的信息流。
Hands-On Reactive Programming in Spring 5
但是,根本没有控制台输出。但是,如果我在Flux.just(1, 2, 3).publishOn(Schedulers.elastic()))
.concatMap(i -> Flux.range(0, i).publishOn(Schedulers.elastic()))
.subscribe(log::info);
之后添加doOnNext
:
just
然后我可以同时获得debug和info的输出。我可以知道为什么吗?
编辑1: 以下流的控制台输出:
Flux.just(1, 2, 3).doOnNext(log::debug).publishOn(Schedulers.elastic()))
.concatMap(i -> Flux.range(0, i).publishOn(Schedulers.elastic()))
.subscribe(log::info);
并输出:
Flux.just(1, 2, 3).doOnNext(log::debug)
.publishOn(Schedulers.elastic())).doOnNext(log::warn)
.concatMap(i -> Flux.range(0, i).publishOn(Schedulers.elastic()))
.subscribe(log::info);
我认为日志消息证明[main] INFO ReactiveTest - 1
[main] INFO ReactiveTest - 2
[elastic-2] WARN ReactiveTest - 1
[main] INFO ReactiveTest - 3
[elastic-2] DEBUG ReactiveTest - 0
[elastic-2] WARN ReactiveTest - 2
[elastic-2] DEBUG ReactiveTest - 0
[elastic-2] DEBUG ReactiveTest - 1
[elastic-2] WARN ReactiveTest - 3
[elastic-2] DEBUG ReactiveTest - 0
[elastic-2] DEBUG ReactiveTest - 1
[elastic-2] DEBUG ReactiveTest - 2
中的函数将与subscribe
的函数在同一线程被调用。
答案 0 :(得分:1)
调用subscribe
之后,您的第一个程序可能会终止。来自subscribe
的文档:
请记住,由于序列可以是异步的,因此它将立即 将控制权返回给调用线程。这可以给消费者留下印象 在主线程或单元测试中执行时不会被调用。
在第二个程序中,doOnNext
在处理过程中被调用,因此有时间输出所有结果。如果您多次运行该程序,您会发现它有时无法输出第二个日志。