java - logger java 不通过 System.out

标签 java logging java.util.logging

我有一个使用 java api 的记录器,在单元测试中,我将标准的输出设置为我的输出,并检查是否正在打印消息(日志、异常等...) 我的代码是

    ByteArrayOutputStream mockedOutput = new ByteArrayOutputStream();
    System.setOut(new PrintStream(mockedOutput));
    System.setErr(new PrintStream(mockedOutput));

但是日志没有在输出中被捕获,如果我检查控制台(eclipse,或通过maven运行),日志就在那里意味着它不会通过我的输出。 如果替换 system.out.print 的日志,那么它就可以工作,我还可以看到异常等,只有使用 java API 记录的内容不会在模拟输出中捕获。

有人有想法吗?我已经没有线索了。

最佳答案

包含更多代码和logging.properties文件,因为输出取决于您的记录器和处理程序的创建时间。

如果您依赖 ConsoleHandler 写入流,那么您必须延迟记录器的创建。这是因为ConsoleHandler will capture a snapshot of System.err .

在看不到代码的情况下,您需要确保:

  1. 您已推迟 ConsoleHandler 的创建,直到重新映射 System.err。
  2. 如果您依赖于根记录器,则延迟构建您已重新映射的 System.err 的根记录器 util。这是通过在重新映射 System.err 后调用 Logger.getLogger("") 来完成的。
  3. 不要让您的loggers get garbage collected没想到。

关于java - logger java 不通过 System.out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60021497/

相关文章:

c++ - 在记录错误时取消引用 ptr 是错误的设计吗?

java - 如何在 Java 中使用 Log4j 逐步配置 jboss 6.x 中的日志记录

java - 如何让 java.util.logging 发送日志到 Logback?

java - 在方法定义内创建的对象的生命周期

java - 如何修复与语义谓词一起使用的左递归中的错误?

python - 日志记录:记录器不记录到文件,而是记录到控制台

python-3.x - Google Cloud Functions Python 日志记录问题

java - 管理分布在多台机器上的大量日志文件

java - Hibernate + Oracle IN 子句限制,如何解决?

Java Create KeyPair 在虚拟机上挂起,但在物理系统上工作