logger java不会通过System.out

问题描述 投票:0回答:1

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

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

但是日志未在输出中捕获,如果我检查控制台(Eclipse或通过maven运行),则日志存在,这意味着该日志未通过我的输出。如果将log替换为system.out.print,那么它将起作用,我还可以看到异常等等,只有在javaed API中记录的内容未在嘲笑的输出中捕获。

有人有主意吗?我没头绪了。

java logging java.util.logging
1个回答
0
投票

包括更多的代码和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出乎意料。
© www.soinside.com 2019 - 2024. All rights reserved.