log4j 1.2.15以及System.out和System.err的重定向

时间:2013-05-07 13:52:59

标签: redirect log4j system.out

在Java / Swing应用程序中,我们将System.out和System.err重定向到一个单独的视图(称为“SystemOutView”),该视图在新输出发生时弹出。这适用于抛出异常和System.out.println()。此视图可以通过属性文件进行配置(即,如果它完全处于活动状态,并且在输出时是否打开)。

在这个项目中我们使用的是log4j 1.2.15。我发现即使发送到STDOUT,log4j输出也不会被重定向到SystemOutView,如果在实例化SystemOutView并且System.out和System.err被重定向到它之前已经发生了一些日志记录。

换句话说:

  1. 将System.out和System.err重定向到SystemOutView
  2. someLogger.debug( “...”)
  3. ...工作正常:日志显示在SystemOutView中。

    BUT:

    1. someLogger.debug( “...”)
    2. 将System.out和System.err重定向到SystemOutView
    3. someLogger.debug( “...”)
    4. ...不起作用:第二个日志语句转到STDOUT(与第一个一样),并且不会被重定向到SystemOutView。

      由于SystemOutView可以通过属性文件进行配置,因此在SystemOutView实例化之前还有大量的工作正在完成,因此很可能会发布一些日志语句。这使得无法将日志输出重定向到SystemOutView。

      我该怎么办?

      提前许多人:-Denis

1 个答案:

答案 0 :(得分:0)

行。我自己解决了这个问题。

每当重定向STDOUT和STDERR时,必须使用以下命令重新初始化log4j:

DOMConfigurator.configure(ConfigFileURL);