gpt4 book ai didi

java - 奇怪的 JUnit 日志记录行为

转载 作者:搜寻专家 更新时间:2023-11-01 01:24:27 24 4
gpt4 key购买 nike

我注意到在 JUnit 测试期间使用标准日志记录时出现了一些奇怪的行为。 JUnit 是否将标准输出重定向到不同的流?我怎样才能访问它?

这是一个简单的 JUnit 测试,它演示了我正在描述的行为。

@Test
public void logMessage() {
// set up new logger with output directed to standard out
Logger logger = Logger.getLogger("my.test.logger");
logger.addHandler(new StreamHandler(System.out, new SimpleFormatter()));

// log a warning message
logger.warning("logger message"); // message 1

// turn off parent handlers
logger.setUseParentHandlers(false);

// log a second warning message
logger.warning("second logger message"); // message 2

// print somehting to standard output
System.out.println("standard output message"); //message 3
}

请注意,我已经创建了一个新的记录器,它只是将其日志消息发送到标准输出 (System.out)。

这是 Junit 的输出

Testsuite: com.my.FormatterTest
Feb 19, 2009 12:02:33 PM com.my.FormatterTest logMessage
WARNING: logger message
standard output message
Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.079 sec

------------- Standard Output ---------------
standard output message
------------- ---------------- ---------------
------------- Standard Error -----------------
Feb 19, 2009 12:02:33 PM com.my.FormatterTest logMessage
WARNING: logger message
------------- ---------------- ---------------
Feb 19, 2009 12:02:33 PM com.my.FormatterTest logMessage
WARNING: logger message
Feb 19, 2009 12:02:33 PM com.my.FormatterTest logMessage
WARNING: second logger message
test:
BUILD SUCCESSFUL (total time: 2 seconds)

为什么消息 1消息 2 不显示在 JUnit 输出的标准输出部分?

谢谢!

最佳答案

正如您间接建议的那样,junit 测试运行者在测试运行时将 stdout 和 stderr 重定向到单独的流。您的记录器通常在发生此重定向之前初始化,这意味着它使用常规 System.out/System.err 将日志记录到控制台。

通过查看 JunitTestRunner 类的源代码可以很容易地看出这一点。

编辑:我看了一些源代码,因为你的问题让我很好奇。我不知道您使用的是哪个 TestRunner,答案可能在那里;流重定向等不是 junit 框架的一部分,而是由 ant/eclipse/maven/idea 实现的。它看起来就像你的 addHandler 没有任何效果,所以我怀疑有什么东西正在拦截它(如果 所有 日志记录都是由父记录器完成的,你的输出将是合乎逻辑的)。

关于java - 奇怪的 JUnit 日志记录行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/566275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com