MENU

Java ログフィルタでHTTPを解析

目次

Java ログフィルタでHTTPリクエストを解析

javax.servlet.Filterを実装してHTTPリクエストの内容を解析してログを出力する便利なFilterクラスを紹介します。

このログフィルタは、ログ出力に「java.util.logging.Logger」を使用しており、ログレベルを変更することで出力する情報を変更できます。

javax.servlet.Filterとは

Webアプリケーション構築する上で、メインとなる業務処理のほかに、その前後で共通した副次的な処理を行う必要があります。
例えば、クライアントの認証や、権限チェック、ロギング等です。
このような副次的な処理をそれぞれのリソースでコーディングすると、ソフトウェアの保守性を妨げる大きな原因となり、メンテナンスのしにくいアプリケーションになってしまいます。

javax.servlet.Filterを実装すれば、リクエスがサーブレットクラスに渡される前に、この副次的な処理を、共通して実行させることができます。
またフィルタの設定はweb.xmlで出来るので、ソースコードを変更することなく、フィルタを追加したり削除することが柔軟に出来ます。


ログフィルタを使ってみる

HTTPリクエストにフィルタを通して、HTTPリクエストを解析するログフィルタを実際に使ってみましょう。
今回はTomcatに最初からあるexamplesアプリケーションを使用します。
以下の設定を行うとこのフィルタはすぐに実行できます。

1.ソースコードを取得してコンパイルする。
2.コンパイルしたクラスファイルを、「/examples/WEB-INF/classes」配下に配置します。
3.web.xmlに以下の定義を設定する。
  <filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   <init-param>
    <param-name>logging.Level</param-name>
    <param-value>FINE</param-value>
   </init-param>
  </filter>
  <filter-mapping> 
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>

※Strutsフレームワークを使用した場合のurl-patternは以下になります。

   <url-pattern>*.do</url-pattern>

Sessions Exampleの画面を実行したログ出力結果を確認してみてください。
javax.servlet.FilterログフィルタでWebアプリケーション解析

出力するログ情報とログレベル

●ログ出力内容

ログ情報 ログレベル
Cookie情報 FINE
HTTPヘッダ情報 FINE
HTTPその他の情報 FINE
HTTPリクエストパラメータ CONFIG
requestスコープのオブジェクト CONFIG
sessionスコープのオブジェクト CONFIG
リクエスト前後のメモリー使用量 CONFIG
画面遷移情報 INFO

ログレベルは以下のように使い分けると良いでしょう。

  • FINE・・・もっとも詳細なログを出力します。HTTPリクエストを詳しく解析したい場合に設定します。
  • CONFIG・・・やや詳細なログを出力します。開発期間中はこのレベルにしているとよいでしょう。
  • INFO・・・・画面遷移情報のみを出力します。

●ログレベルの変更方法
初期化パラメータlogging.Levelを設定することで、ログの出力レベルを変更できます。
例:

   <init-param>
    <param-name>logging.Level</param-name>
    <param-value>INFO</param-value>
   </init-param>

ソースコード

  • URLをコピーしました!
目次