2009-05-08 4 views
3

お客様の数はごくわずかです(50未満)。それぞれに独自のログファイルを用意して、すべてのサーバーサイドログ情報を記録してください。 Log4jの標準的なアペンダーを使用してログ・ステートメントを別のファイルに送るためにNDCとフィルターを使用できますが、これはかなりのセットアップ(既存のすべての顧客のロガー作成)を必要とし、自動的に新しい顧客をシステムに追加する。Log4jのNDCに基づいて別々のファイルにログするアペンダーを見たことがありますか?

Log4j NDCの値に基づいてログ文を分割してファイルを分割するアペンダーを見たことがありますか?私はそれを行うために新しいアペンダーを作ることができると思うが、私はすでにうまく動作するようなものを手に入れることができればいいとは言い切れない。

答えて

5

logback(log4jの後継)と一緒に出荷されるSiftingAppenderは、この状況を正確に処理するように設計されています。

その名前が示すように、SiftingAppenderを使用して、指定された実行時属性に従ってロギングを分離(または選別)することができます。たとえば、SiftingAppenderは、すべてのユーザーによって生成されたログがユーザーごとに1つのログファイルになるように、ユーザーセッションに従ってログイベントを分離できます。たとえば、SiftingAppenderは、ロギングイベントをユーザーごとに1つの別個のログファイルに分割できます。

documentation for SiftingAppenderには、ユーザーIDに基づいてログを区切る例が含まれています。

+0

私はJavaにとても慣れていましたが、Logbackのようなものは私のレーダーから逃れることができませんでした。これを指摘していただきありがとうございます。新しいソフトウェアに切り替えると、多くの機能が得られますが、それは問題ではありません。 –

+0

しかし、ユーザー情報にはMDCを使用する必要があります。 SLF4J/LogbackではNDCはサポートされていません。 – Huxi

+0

実際、NDCはSLF4J APIの一部ではありません。ただし、MDCを使用してNDCをエミュレートすることは可能です。たとえば、http://svn.slf4j.org/viewvc?view=rev&revision=1268を参照してください。 – Ceki

1

私はこれを行うことができる標準またはサードパーティ製のアペンダーを認識していませんし、自分で書くことができる間は標準のファイルアペンダー(ローリングまたはそれ以外のもの)を使う傾向があります。ログの読み込みにテキストの行をフィルタリングする(つまり、パターンと一致しない行はすべてビューから除外する)ツールを使用します。フィルタリングできるエディタのほとんどは、既存のパターンを再利用できるようにフィルタセットを設定することもできます。あなたが使用しているOSがわからず、誰もが自分の好みを持っているので、私はのエディタで使って議論しません。

1

マルチファイルアペンダーでファイル名の一部を指定し、残りの部分にNDCが埋め込まれているように思えます。私はこのようなことは認識していません。おそらくあなたはあなた自身をロールバックしなければならないでしょう。

独自にロールする場合は、内部でMapRollingFileAppenderを動的に作成するAppenderを作成することをお勧めします。しかし、アペンダーがNDCにアクセスできるかどうかわかりません。これはおそらく重要ではない仕事です。

1

私は決してそのようなアペンダーにも会ったことはありませんが、自分で書くことは大したことではないと思います。 AppenderSkeletonを参照してください。最小限にするには、append(..)メソッドをオーバーライドする必要があります。あなたのアペンダが呼び出されると、NDCを含む必要なものすべてが含まれる、完全に形成されたイベントが発生します。あなたがそれで好きなことをしてください。私はあなたのケースでMDC(マッピングされた診断コンテキスト)は実行可能な選択肢だと思う、より柔軟なIMHOです。

logFacesをご覧ください。類似の状況を処理するために設計されています。 ディスクロージャー:私はこの製品の作者です。

+0

私はAppenderSkeletonを使って解決策を構築したが、それほど難しいことではないことに気づいたと思う。私は1日か2日以内に良いテストを受けました。 –