【问题标题】:How to capture log output from Flux in these unit tests?如何在这些单元测试中捕获 Flux 的日志输出?
【发布时间】:2020-12-10 10:13:02
【问题描述】:

我正在查看这个项目中的示例代码https://github.com/balamaci/reactor-core-playground#simple-operators

这里是源码中的一个典型函数

@Test
public void delayElements() {
    CountDownLatch latch = new CountDownLatch(1);

    log.info("Starting");
    Flux.range(0, 5)
            .doOnNext(val -> log.info("Emitted {}", val))
            .delayElements(Duration.of(2, ChronoUnit.SECONDS))
            .subscribe(
                    tick -> log.info("Tick {}", tick),
                    (ex) -> log.info("Error emitted"),
                    () -> {
                        log.info("Completed");
                        latch.countDown();
                    });

    Helpers.wait(latch);
}

我希望能够看到像Error emitted 这样的日志输出。

但是,如果我运行mvn test,我根本看不到任何标准输出。

我尝试在surefire插件中启用日志捕获,但它也没有实现任何目标

+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <redirectTestOutputToFile>true</redirectTestOutputToFile>
+          </configuration>
+        </plugin>

资源中有一个属性文件

org.slf4j.simpleLogger.logFile=System.out
org.slf4j.simpleLogger.defaultLogLevel=info
org.slf4j.simpleLogger.showDateTime=true
org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS
org.slf4j.simpleLogger.showThreadName=true
org.slf4j.simpleLogger.showShortLogName=true 

但输出仍然是

$ mvn test
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< com.balamaci:reactor-playground >-------------------
[INFO] Building Reactor-Core Playground 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ reactor-playground ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/antkong/experiments/flux/reactor-core-playground/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ reactor-playground ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ reactor-playground ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ reactor-playground ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @ reactor-playground ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.657 s
[INFO] Finished at: 2020-08-21T18:27:58+10:00
[INFO] ------------------------------------------------------------------------

在这种情况下,如何捕获日志输出?

【问题讨论】:

  • 提供一个最小的、可重现的例子;我没有能力修复我看不到的代码。
  • 回购的链接在问题中。它尽可能地小。
  • 我强烈建议在运行测试时使用 reactor-test 项目。您将可以访问StepVerifier,以便您可以在您的流程上实际运行断言。

标签: java project-reactor


【解决方案1】:

这里的问题似乎是类名中缺少Test 字,所以它们根本没有运行。像mvn test -Dtest=Part02SimpleOperators 这样的命令,你提供一个名字,工作得很好。

【讨论】:

    【解决方案2】:

    似乎您在类路径上没有任何记录器实现。尝试添加以下内容:

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    

    并创建resources/logback.xml

    <configuration>
    
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="info" additivity="false">
            <appender-ref ref="STDOUT"/>
        </root>
    
    </configuration>
    

    【讨论】:

    • 感谢答案,但它似乎不起作用。我已将mv test 输出添加到问题中。
    猜你喜欢
    • 2013-12-29
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2016-12-23
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多