I hope that Log4j does not need any introduction and I assume that you already have basic understanding of Log4j.Log4jの基本的な理解を持っていることを望みます。 そうでなければ、私はあなたが最初に始めるために、このLog4jチュートリアルを読むことをお勧めします。

それはそうと、今私はMDCまたはMapped Diagnostic Contextで開始します。 この名前で怖がらないでください! MDC はそれほど難しいものではありません。 MDC はシンプルで便利な概念です。 MDCとは何かを説明する前に、複数のクライアントからのリクエストを処理する1つのサーブレット MyServlet でシンプルなWebアプリケーションを開発すると仮定しましょう。 そして、このサーブレットはロギングに log4j フレームワークを使用しています。 このサーブレットにはファイルアペンダーが定義されているので、すべてのログメッセージはテキストファイルに記録されます。

上記の設定により、MyServlet からのすべてのログメッセージは 1 つのログファイルに記録されることになります。 そして、このサーブレットが同時に複数のクライアントにサービスを提供している場合、ログ文は混在し、どのログ文がどのクライアントの処理に属しているかを区別する方法はありません。

How to differentiate log statements with respective to each clients?

ログステートメントの混在を避けるために、ログステートメントにユーザー名(または各クライアントに固有の他のデータ)を追加することが可能です。 これを行うには、我々はこのユーザー名のデータを明示的に各ログステートメントに渡すことを確認する必要があり、これは退屈で反復的な作業です。 しかし、心配する必要はありません! Log4jは、これを克服する優れた方法を持っています。 それは、MDCまたはMapped Diagnostic Contextとして呼ばれます。

So, What is Log4j MDC (Mapped Diagnostic Context)

それを簡単に言うと、MDCは、コンテキストが実行されている特定のスレッドのコンテキストデータを格納する地図です。 それを説明するために、私たちの簡単なアプリケーションに戻ってくる – すべてのクライアント要求は、MyServletの異なるスレッドによって提供されます。 あなたがロギングのためにlog4jを使用する場合、各スレッドは、全体のスレッドにグローバルであるそれ自身のMDCを持つことができるように、だから、。 そのスレッドの一部である任意のコードは、簡単にスレッドのMDCに存在する値にアクセスすることができます。

だから、どのように我々は複数のクライアントからログステートメントを区別するためにMDCを作るのですか? 簡単です。コード内のビジネス プロセスを開始する前に、ユーザー名を取得し (サーブレットの場合、request オブジェクトから取得できます)、それを MDC に入力します。 これで、ユーザ名がその後の処理に利用できるようになります。 log4j.propertiesでconversionPatternを定義しながら、パターン%X{key}を追加して、MDCに存在する値を取得する。 キーは、この例ではuserNameになります。 これは、Sessionオブジェクトから値を取得するようなものです

コメントを残す

メールアドレスが公開されることはありません。