在Java / Swing应用程序中,我们将System.out和System.err重定向到一个单独的视图(称为“SystemOutView”),该视图在新输出发生时弹出。这适用于抛出异常和System.out.println()
。此视图可以通过属性文件进行配置(即,如果它完全处于活动状态,并且在输出时是否打开)。
在这个项目中我们使用的是log4j 1.2.15。我发现即使发送到STDOUT,log4j输出也不会被重定向到SystemOutView,如果在实例化SystemOutView并且System.out和System.err被重定向到它之前已经发生了一些日志记录。
换句话说:
...工作正常:日志显示在SystemOutView中。
BUT:
...不起作用:第二个日志语句转到STDOUT(与第一个一样),并且不会被重定向到SystemOutView。
由于SystemOutView可以通过属性文件进行配置,因此在SystemOutView实例化之前还有大量的工作正在完成,因此很可能会发布一些日志语句。这使得无法将日志输出重定向到SystemOutView。
我该怎么办?
提前许多人:-Denis
答案 0 :(得分:0)
行。我自己解决了这个问题。
每当重定向STDOUT和STDERR时,必须使用以下命令重新初始化log4j:
DOMConfigurator.configure(ConfigFileURL);