5

複数の「コントローラー」を備えたアプリケーションがあり、各ログを独自のファイルに保存したいと思います。これは彼ら自身のコードにとっては十分に簡単ですが、私はコモンズロギングを使用するいくつかのライブラリコードも使用しています。どういうわけか、そのコードをコントローラー固有のファイルにも記録させることができますか?

私はどういうわけかスレッドでそれを行うことができると思っていました:

class Controller {

 public void action() {
  setCurrentThreadLogFile(myLogFile);
  try {
   Library.stuff();
  } finally {
   restoreCurrentThreadLogFile();
  }
 }

}

現在、log4jをバックエンドとして使用して、自分のログにもcommons-loggingを使用しています。ただし、必要に応じて変更することも、組み合わせて使用​​することもできます(これは、コモンズロギングフレームワーク内で可能です)。

これを行う1つの方法は、独自のコモンズロギング実装(おそらくlog4jのラッパー)を作成することですが、既存のソリューションはありますか?

4

2 に答える 2

2

マップされた診断コンテキスト(MDC)を確認することをお勧めします。Commons Loggingはこれらをサポートしていませんが、Log4Jはサポートしているため、これを設定するにはLog4Jに直接アクセスする必要があります。MDCを使用してフィルタリングし、アペンダーに適用するには、おそらく独自のフィルターをロールする必要があります。

ロギングの実装を変更する場合は、ロギングのファサードとしてSL4Jを使用し、ロギングの実装としてLogbackを使用できます。コントローラーまたはある種のフィルター/インターセプターに、コントローラーを識別するために使用するキーの識別値をMDCに追加してもらいます。SiftingAppenderを使用して、ログイベントを個別のファイルに分割します。

于 2011-02-27T20:47:14.380 に答える
1

スレッドごとのロガー?ロガーをに入れThreadLocalます。を使用している場合java.util.loggingHandlerこれを呼び出し元に対して透過的にすることができます。

于 2011-02-27T20:16:00.937 に答える