2

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

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

换句话说:

  1. 将 System.out 和 System.err 重定向到 SystemOutView
  2. someLogger.debug("...")

... 工作正常:日志出现在 SystemOutView 中。

但:

  1. someLogger.debug("...")
  2. 将 System.out 和 System.err 重定向到 SystemOutView
  3. someLogger.debug("...")

...不起作用:第二条日志语句转到 STDOUT(如第一条)并且没有被重定向到 SystemOutView。

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

我能做些什么呢?

提前
感谢:-丹尼斯

4

1 回答 1

0

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

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

DOMConfigurator.configure(ConfigFileURL);
于 2013-05-08T07:07:46.417 回答