在 Java/Swing 应用程序中,我们将 System.out 和 System.err 重定向到单独的视图(称为“SystemOutView”),当出现新输出时,该视图会弹出打开。这适用于抛出的异常和System.out.println()
. 该视图可以通过属性文件进行配置(即,它是否完全处于活动状态以及是否在输出时弹出打开)。
在这个项目中,我们使用 log4j 1.2.15。我发现 log4j 输出,即使发送到 STDOUT,如果在 SystemOutView 实例化并且 System.out 和 System.err 被重定向到它之前已经发生了一些日志记录,它也不会被重定向到 SystemOutView。
换句话说:
- 将 System.out 和 System.err 重定向到 SystemOutView
- someLogger.debug("...")
... 工作正常:日志出现在 SystemOutView 中。
但:
- someLogger.debug("...")
- 将 System.out 和 System.err 重定向到 SystemOutView
- someLogger.debug("...")
...不起作用:第二条日志语句转到 STDOUT(如第一条)并且没有被重定向到 SystemOutView。
由于 SystemOutView 可以通过属性文件进行配置,因此在 SystemOutView 实例化之前需要完成大量工作,因此很可能会发出一些日志语句。这使得无法将日志输出重定向到 SystemOutView。
我能做些什么呢?
提前
感谢:-丹尼斯