2016-07-21 22 views
1

Log4J2を私のプロジェクトでカスタムロギング機能のビットと統合しようとしていて、Log4J2が自分の実装と同様に動作するようになっています。実行中に発生するイベントに基づいて、書き込まれているログファイルを変更することができます(存在しない場合は、古いファイルへの書き込みを停止し、新しいファイルへの書き込みのみ)。実行時にLog4J2出力ファイルを変更します

私が探しているものをうまく示している例を挙げます。アプリケーションを起動して所定のログファイル名に書き出しますが、実際に何も問題が起きていないため、予備ログを記録しています。環境条件が正しく、ユーザー入力を受けたら、ソフトウェアが作動しており、デバッグ情報とデータ取得の両方のログを開始したいと考えています。予備データと興味深いデータを分離するために、ログファイルを新しいログファイルに変更したい。その名前には、システムが稼動していたときの環境の状態に関する詳細情報が含まれているため、どのログファイル我々は分析し、後処理したい。

私は同様のことを達成する方法についての記事を見てきましたが、Log4J2が初期化される前に新しいファイル名を知っている必要があります(システムプロパティを設定する)か、ファイル名に入れる可能性のあるすべての値を知ることを要求する必要があります。私たちは、ファイル名に入れたい各環境状態(またはさらに悪いことに、各状態の組み合わせ)ごとに1つのルートを定義する必要があります。

アイデア?

答えて

1

RoutingAppenderを使用して、ThreadContextキー/値に基づいて新しいファイルを動的に作成します。ここで

はこれを行う方法の一例です:例では https://logging.apache.org/log4j/2.x/faq.html#separate_log_files

、はThreadContextマップでROUTINGKEYの値は、新しいファイル名が決定されます。

+0

これは、(ThreadContextマップインスタンスを持つ)1つのスレッドのためのものですが、そうですか?私はすべてのスレッドのすべてのロガーに新しいファイルへの書き込みを開始させるメソッドを持つ単一の静的クラスを持っています。 –

+0

私はRoutingAppenderについて間違っていました。ありがとう! –

関連する問題