2

Java/Swing アプリケーションでは、System.out と System.err を別のビュー ("SystemOutView" と呼ばれる) にリダイレクトしました。このビューは、新しい出力が発生したときに開かれます。これは、スローされた例外およびSystem.out.println(). このビューは、プロパティ ファイルを介して構成できます (つまり、それがまったくアクティブで、出力時にポップ オープンするかどうか)。

このプロジェクトでは、log4j 1.2.15 を使用しています。SystemOutView がインスタンス化されて System.out と System.err がリダイレクトされる前に何らかのロギングが既に行われている場合、log4j 出力は STDOUT に送信されても​​ SystemOutView にリダイレクトされないことがわかりました。

言い換えると:

  1. System.out と System.err を SystemOutView にリダイレクトする
  2. someLogger.debug("...")

... 正常に動作します: SystemOutView にログが表示されます。

しかし:

  1. someLogger.debug("...")
  2. System.out と System.err を SystemOutView にリダイレクトする
  3. someLogger.debug("...")

... 機能しません: 2 番目のログ ステートメントは (1 番目のものと同様に) STDOUT に送られ、SystemOutView にリダイレクトされません。

SystemOutView はプロパティ ファイルを介して構成できるため、SystemOutView がインスタンス化される前に多数の作業が行われているため、いくつかのログ ステートメントが発行されている可能性が非常に高くなります。これにより、ログ出力を SystemOutView にリダイレクトすることができなくなります。

それについて私は何ができますか?

事前に感謝し
ます:-デニス

4

1 に答える 1

0

わかった。私は自分で問題を解決しました。

STDOUT と STDERR をリダイレクトするときはいつでも、次を使用して log4j を再初期化する必要があります。

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