7

2 つのプロジェクト: 製品 (プロジェクト A) と A の自動ベンチマーク プロジェクト (プロジェクト B)。

B のビルド ファイルでは、A のビルド ファイルを呼び出して、ビルドと bundle-with-app-server プロセスを次のように実行する必要があります。

<ant antfile="${build-file-A}" inheritall="false" target="all" />

また、プロジェクト B には、java.util.logging (The JDK Logging Framework) を使用してメッセージを出力する Ant タスクが多数あります。

問題は、その行の後、すべての jdk ロガー出力が消えることです。

デバッグすると、プロジェクト A のビルド ファイルの初期化中に、プロジェクト A で静的に定義されたものが実行さLogManager.readConfiguration(InputStream)れ、単一のクラスのロガー構成のみを含む構成ファイルが読み込まれることがわかりました。

中にreadConfigurationLogManager.reset()が呼び出されます。reset、各ロガーの各ハンドラは削除されます。がターゲット ビルド ファイルを呼び出し元の同じプロセスにロードするため<ant>、すべてのハンドラーが削除されます。

したがって、構成されたものを除いて、jdk ロガーを使用する他のすべてのクラスは、出力ハンドラーがないためにメッセージを出力できません。

私の質問は:

この問題を解決する方法はありますか?

  1. <exec>プロジェクト A のビルド ファイルを実行するために使用します。
  2. readConfiguration()呼び出し後にデフォルトの構成ファイルからデフォルトの JDK ログ設定を復元するために実行するタスクを記述し<ant>ます。
  3. ant 独自のロギング フレームワーク (Task.log() など) を使用します。

問題を防ぐためにプロジェクト A を変更することはできません。

4

1 に答える 1

2

LogManagerサブクラスとオーバーライド、および必要なハンドラーをインストールするreset2 つのメソッドを作成できる場合があります。readConfiguration次に、java.util.logging.config.classシステム プロパティを使用して、起動時にカスタム コードをインストールします。

于 2013-07-26T14:05:35.383 に答える