ビジネスチャット、ビデオ通話、文書管理、スケジュールを統合。IP Messenger 互換。基本無料!

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

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

javax.servlet.Filterを実装してHTTPリクエストの内容を解析してログを出力する便利なFilterクラスを紹介します。
このログフィルタは、ログ出力に「java.util.logging.Logger」を使用しており、ログレベルを変更することで出力する情報を変更できます。

 お勧めフリーソフト

当サイトで公開している Chat&Messenger は 10年以上の実績がある基本無料の国産ビジネスチャットツールです。ユーザを自動認識して直ぐにチャット、テレビ会議、スケジュール管理などが無料で利用できます。(Windows / Mac / Android / iOS)

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>

ソースコード