WEBのログ出力で、パス名やセッションIDなどを出力する部品

Log4jを使用するとログ出力はかなり簡単になります。

%dや%pなどの置き換え文字を使用して、ログ出力のレイアウトを自由に変えられます。

しかしWEBの場合、URLのパス名やセッションIDなどの情報を常にログ出力したくなります。

なぜならログ解析をする時、もしくはセキュリティの監査のためにユーザの操作をトレースしたい時などに重要な情報だからです。

通常のLog4jではこれらの値はログ出力できません。

しかし、Log4jMdcSetterFilterフィルタを使用することで簡単に出力できるようになります。

また、インターフェースを継承すれば自作の出力を追加することもできます。

以下でこのクラスの設定の仕方を見ていきます。

【参考:javadoc】

Log4jMdcSetterFilter

目標

まず、以下のサンプルの目標(ゴール)を示します。

Log4jMdcSetterFilterでは、Log4jのMDCクラスを使用することで希望かなえます。

MDCは内部にキー名と値を持つことができ、%X{キー名} という置き換え文字をレイアウトに追加することができるようになります。

ゴールは、%X{reqid} 、%X{path}という置き換え文字を追加し、ログ出力できるようにすることです。

%X{reqid} ・・・リクエスト識別子。1リクエスト毎に違う値を出力。

%X{path} ・・・パス名。

使用サンプル

<フィルタの設定サンプル: web.xml>

Log4jMdcSetterFilterクラスはフィルタですので、web.xmlに設定します。

フィルタの順番は良く考えて設定してください。このフィルタ開始から終了までの間のみ、追加の置き換え文字が有効になります。

<!-- Log4jのためのフィルタ -->

<filter>

<filter-name>Log4jMdcSetterFilter</filter-name>

<filter-class>jp.co.soracane.log4j.web.mdc.Log4jMdcSetterFilter</filter-class>

<init-param>

<param-name>putMdcKeys</param-name>

<param-value>

reqid=jp.co.soracane.log4j.web.mdc.RequestIdGetter

path=jp.co.soracane.log4j.web.mdc.WebPathGetter

</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>Log4jMdcSetterFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

書式は、「キー名=クラス名」です。

キー名は任意に記述できます。

<Log4jの設定サンプル: log4j.properties>

Log4jでの設定ファイルの記述は以下のようにします。

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS} %X{reqid} %X{path} %m%n

最後に

上記のように設定すれば、以下のような出力がされます。

2010/12/07 23:50:57.500 6 /top.jsp 処理開始--------------------

それ程難しくないかなと思います。

サンプルでは2つの置き換え文字用の機能を紹介しました。soracaneでは他にもいくつか部品を持っています。

javadocのMdcGetterインターフェースを見てみてください。

「既知の実装クラス」を確認していただければ、他にどのような部品があるか分かるかと思います。

【MdcGetterの簡単な紹介】

詳しくはjavadocをご覧ください。

Created Date: 2010/01/07