调用publishOn时如何获取线程信息日志
How to get thread information logs when calling publishOn
我正在使用反应流中的调度程序,并使用 publishOn 方法在此 Flux 上使用 Flux 和调度程序,如下所示:
System.out.println("*********Calling Concurrency************");
List<Integer> elements = new ArrayList<>();
Flux.range(1, 1000)
.log()
.map(i -> i * 2)
.publishOn(Schedulers.parallel())
//.subscribeOn(Schedulers.parallel())
.subscribe(elements::add);
System.out.println("-------------------------------------");
为此我得到了以下信息日志:
*********Calling Concurrency************
[info] | onSubscribe([Synchronous Fuseable] FluxRange.RangeSubscription)
[info] | request(256)
[info] | onNext(1)
[info] | onNext(2)
[info] | onNext(3)
[info] | onNext(4)
[info] | onNext(5)
[info] | onNext(6)
[info] | onNext(7)
[info] | onNext(8)
[info] | onNext(9)
.....
.....
[info] | onNext(444)
[info] | onNext(445)
[info] | onNext(446)
[info] | onNext(447)
[info] | onNext(448)
-------------------------------------
[info] | request(192)
.....
.....
[info] | onNext(999)
[info] | onNext(1000)
[info] | onComplete()
[info] | request(192)
并且没有关于线程执行和处理的信息。
另外,有时需要 192 个元素,有时需要 256 个元素。
这是我正在使用的依赖项:
<dependency>
<groupId>com.googlecode.slf4j-maven-plugin-log</groupId>
<artifactId>slf4j-maven-plugin-log</artifactId>
<version>1.0.0</version>
</dependency>
如何获取当前thread/parallel线程执行的日志信息?
请提出建议。
要获取所有必需的信息,只需在 .publishOn()
之后输入 .log()
Flux.range(1, 1000)
.map(i -> i * 2)
.publishOn(Schedulers.parallel())
//.subscribeOn(Schedulers.parallel())
.log()
.blockLast();
最终输出如下:
12:13:21.964 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
12:13:21.997 [main] INFO reactor.Flux.PublishOn.1 - | onSubscribe([Fuseable] FluxPublishOn.PublishOnSubscriber)
12:13:21.999 [main] INFO reactor.Flux.PublishOn.1 - | request(unbounded)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(2)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(4)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(6)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(8)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(10)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(12)
所以在那种情况下,有关 Thread 的信息将在那里
Note: Output might varying depends on used Logger library
这看起来像是您这边的记录器配置错误。
Reactor 会发现您使用的是 SLF4J,但您仍然需要正确配置的日志记录实现,例如 Logback,以及将记录线程名称的相关附加程序。
如果您根本不想使用日志记录框架,可以调用 Loggers.useConsoleLoggers()
,它将以包括当前线程名称的简化格式打印在控制台上。不过,我建议只针对 1 次 运行(如调试会话)执行此操作,而不是在生产代码中...
我正在使用反应流中的调度程序,并使用 publishOn 方法在此 Flux 上使用 Flux 和调度程序,如下所示:
System.out.println("*********Calling Concurrency************");
List<Integer> elements = new ArrayList<>();
Flux.range(1, 1000)
.log()
.map(i -> i * 2)
.publishOn(Schedulers.parallel())
//.subscribeOn(Schedulers.parallel())
.subscribe(elements::add);
System.out.println("-------------------------------------");
为此我得到了以下信息日志:
*********Calling Concurrency************
[info] | onSubscribe([Synchronous Fuseable] FluxRange.RangeSubscription)
[info] | request(256)
[info] | onNext(1)
[info] | onNext(2)
[info] | onNext(3)
[info] | onNext(4)
[info] | onNext(5)
[info] | onNext(6)
[info] | onNext(7)
[info] | onNext(8)
[info] | onNext(9)
.....
.....
[info] | onNext(444)
[info] | onNext(445)
[info] | onNext(446)
[info] | onNext(447)
[info] | onNext(448)
-------------------------------------
[info] | request(192)
.....
.....
[info] | onNext(999)
[info] | onNext(1000)
[info] | onComplete()
[info] | request(192)
并且没有关于线程执行和处理的信息。 另外,有时需要 192 个元素,有时需要 256 个元素。
这是我正在使用的依赖项:
<dependency>
<groupId>com.googlecode.slf4j-maven-plugin-log</groupId>
<artifactId>slf4j-maven-plugin-log</artifactId>
<version>1.0.0</version>
</dependency>
如何获取当前thread/parallel线程执行的日志信息? 请提出建议。
要获取所有必需的信息,只需在 .publishOn()
.log()
Flux.range(1, 1000)
.map(i -> i * 2)
.publishOn(Schedulers.parallel())
//.subscribeOn(Schedulers.parallel())
.log()
.blockLast();
最终输出如下:
12:13:21.964 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
12:13:21.997 [main] INFO reactor.Flux.PublishOn.1 - | onSubscribe([Fuseable] FluxPublishOn.PublishOnSubscriber)
12:13:21.999 [main] INFO reactor.Flux.PublishOn.1 - | request(unbounded)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(2)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(4)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(6)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(8)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(10)
12:13:22.002 [parallel-1] INFO reactor.Flux.PublishOn.1 - | onNext(12)
所以在那种情况下,有关 Thread 的信息将在那里
Note: Output might varying depends on used Logger library
这看起来像是您这边的记录器配置错误。
Reactor 会发现您使用的是 SLF4J,但您仍然需要正确配置的日志记录实现,例如 Logback,以及将记录线程名称的相关附加程序。
如果您根本不想使用日志记录框架,可以调用 Loggers.useConsoleLoggers()
,它将以包括当前线程名称的简化格式打印在控制台上。不过,我建议只针对 1 次 运行(如调试会话)执行此操作,而不是在生产代码中...