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)
れ、単一のクラスのロガー構成のみを含む構成ファイルが読み込まれることがわかりました。
中にreadConfiguration
、LogManager.reset()
が呼び出されます。中reset
、各ロガーの各ハンドラは削除されます。がターゲット ビルド ファイルを呼び出し元の同じプロセスにロードするため<ant>
、すべてのハンドラーが削除されます。
したがって、構成されたものを除いて、jdk ロガーを使用する他のすべてのクラスは、出力ハンドラーがないためにメッセージを出力できません。
私の質問は:
この問題を解決する方法はありますか?
<exec>
プロジェクト A のビルド ファイルを実行するために使用します。readConfiguration()
呼び出し後にデフォルトの構成ファイルからデフォルトの JDK ログ設定を復元するために実行するタスクを記述し<ant>
ます。- ant 独自のロギング フレームワーク (Task.log() など) を使用します。
問題を防ぐためにプロジェクト A を変更することはできません。