Redirect log4j 1.2.15和System.out和System.err的重定向

Redirect log4j 1.2.15和System.out和System.err的重定向,redirect,log4j,system.out,Redirect,Log4j,System.out,在Java/Swing应用程序中,我们将System.out和System.err重定向到一个单独的视图(称为“SystemOutView”),当出现新的输出时,该视图将弹出打开。对于抛出的异常和System.out.println(),这非常有效。可以通过属性文件配置此视图(即,它是否处于活动状态,以及是否在输出时打开) 在这个项目中,我们使用log4j1.2.15。我发现log4j输出,即使发送到STDOUT,也没有被重定向到SystemOutView,如果在SystemOutView被实例

在Java/Swing应用程序中,我们将System.out和System.err重定向到一个单独的视图(称为“SystemOutView”),当出现新的输出时,该视图将弹出打开。对于抛出的异常和
System.out.println()
,这非常有效。可以通过属性文件配置此视图(即,它是否处于活动状态,以及是否在输出时打开)

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

换言之:

  • 将System.out和System.err重定向到SystemOutView
  • 调试(“…”)
  • 。。。工作正常:日志显示在SystemOutView中

    但是:

  • 调试(“…”)
  • 将System.out和System.err重定向到SystemOutView
  • 调试(“…”)
  • 。。。不工作:第二条log语句转到标准输出(与第一条类似),并且没有被重定向到SystemOutView

    由于SystemOutView可以通过属性文件进行配置,因此在实例化SystemOutView之前需要完成大量的工作,因此很可能会发出一些日志语句。这样就不可能将日志输出重定向到SystemOutView

    我能做些什么


    提前很多时间:-Denis

    好的。我自己解决了这个问题

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

    DOMConfigurator.configure(ConfigFileURL);