5.17.2 インプロセスHTTPサーバのアクセスログのカスタマイズ

インプロセスHTTPサーバでは,アプリケーション開発のサポート,運用時の性能解析,および障害発生時のトラブルシュートのために,アクセスログ,性能解析トレース,スレッドトレース,および通信トレースを出力します。これらのファイルは,ファイル面数やファイルサイズなどを変更できます。また,アクセスログでは,ログの出力形式をカスタマイズできます。

ここでは,インプロセスHTTPサーバのアクセスログの出力形式のカスタマイズについて説明します。インプロセスHTTPサーバのアクセスログおよびトレースファイルのファイル面数やファイルサイズなどの変更については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「3.3.11 インプロセスHTTPサーバのログ取得の設定」を参照してください。

<この項の構成>
(1) カスタマイズの手順
(2) アクセスログのフォーマット
(3) アクセスログのフォーマットの引数

(1) カスタマイズの手順

アクセスログの出力形式のカスタマイズの手順を次に示します。

  1. アクセスログのフォーマット名を定義します。
    フォーマットを新規作成する場合には,簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に,webserver.logger.access_log.format_listパラメタで,新規に作成するフォーマット名を追加します。
    設定例


    <param>
     <param-name>webserver.logger.access_log.format_list</param-name>
     <param-value>formatA</param-value>
    </param>

    フォーマットを新規作成する場合には,デフォルトで提供されているアクセスログのフォーマットを参考にしてください。フォーマットについては,「(2) アクセスログのフォーマット」を参照してください。
  2. アクセスログの出力形式を定義します。
    簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に,webserver.logger.access_log.<フォーマット名>パラメタで,<フォーマット名>で指定したフォーマットでのアクセスログの出力形式を定義します。出力形式の定義では,アクセスログのフォーマットの引数を指定します。
    設定例


    <param>
     <param-name>webserver.logger.access_log.formatA</param-name>
     <param-value>%h %u %t &quot;%r&quot; %&gt;s HostHeader=&quot;%{host}i&quot;</param-value>
    </param>

    指定できるフォーマットの引数については,「(3) アクセスログのフォーマットの引数」を参照してください。
  3. アクセスログの出力に使用するフォーマットを指定します。
    簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に,webserver.logger.access_log.inprocess_http.usage_formatパラメタで,アクセスログの出力に使用するフォーマット名を指定します。ここで指定したフォーマットで,アクセスログが出力されるようになります。
    設定例


    <param>
     <param-name>webserver.logger.access_log.inprocess_http.usage_format</param-name>
     <param-value>formatA</param-value>
    </param>

(2) アクセスログのフォーマット

アプリケーションサーバでは,インプロセスHTTPサーバのアクセスログのフォーマットとして,common(デフォルトフォーマット)とcombined(拡張フォーマット)という2種類のフォーマットを提供しています。フォーマットを新規作成する場合には,これらのフォーマットを参考にしてください。

(a) 出力形式

アクセスログの出力形式について説明します。なお,△は,半角スペースを表します。また,ここでは,表記の都合上,複数行にわたっていますが,実際には1行で出力されます。

デフォルトフォーマットの出力形式を次に示します。

Webクライアントのホスト名またはIPアドレス△リモートログ名△認証ユーザ名
△Webクライアントからのリクエストの処理を開始した時刻△リクエストライン
△最終ステータスコード△HTTPヘッダを除く送信バイト数

拡張フォーマットの出力形式を次に示します。

Webクライアントのホスト名またはIPアドレス△リモートログ名△認証ユーザ名
△Webクライアントからのリクエストの処理を開始した時刻△リクエストライン
△最終ステータスコード△HTTPヘッダを除く送信バイト数
△"Refererヘッダの内容"△"User-Agentヘッダの内容"

下線部分が,デフォルトフォーマットと拡張フォーマットの差異です。拡張フォーマットでは,デフォルトフォーマットの出力内容に加えて,「Refererヘッダの内容」と「User-Agentヘッダの内容」が出力されます。

(b) 出力例

デフォルトフォーマットでのアクセスログの出力例を次に示します。

10.20.30.40 - user [20/Dec/2004:15:45:01 +0900] "GET /index.html HTTP/1.1" 200 8358
10.20.30.40 - user [20/Dec/2004:15:45:01 +0900] "GET /left.html HTTP/1.1" 200 2358
10.20.30.40 - user [20/Dec/2004:15:45:01 +0900] "GET /right.html HTTP/1.1" 200 4358

拡張フォーマットでのアクセスログの出力例を次に示します。

10.20.30.40 - - [18/Jan/2005:13:06:10 +0900] "GET / HTTP/1.0" 200 38 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
10.20.30.40 - - [18/Jan/2005:13:06:25 +0900] "GET /demo/ HTTP/1.0" 500 684 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

(3) アクセスログのフォーマットの引数

フォーマットの出力形式を定義するときに指定する,アクセスログのフォーマットの引数を次の表に示します。

表5-27 アクセスログのフォーマットの引数の一覧

フォーマットの引数出力内容出力例
%%%記号%
%aWebクライアントのIPアドレス10.20.30.40
%AJ2EEサーバのIPアドレス10.20.30.100
%bHTTPヘッダを除く送信バイト数
(0バイトの場合は「-」となる)
2048
%BHTTPヘッダを除く送信バイト数
(0バイトの場合は「0」となる)
1024
%hWebクライアントのホスト名またはIPアドレス
(ホスト名を取得できない場合はIPアドレスとなる)
10.20.30.40
%HリクエストプロトコルHTTP/1.1
%lリモートログ名※1
(常に「-」になる)
-
%mリクエストメソッドGET
%pWebクライアントからのリクエストを受け付けたポート番号80
%qクエリ文字列
(「?」から始まる。クエリ文字列がない場合は空文字となる)
?id=100&page=15
%rリクエストラインGET /index.html HTTP/1.1
%>s最終ステータスコード
(内部リダイレクトされた値は出力しない)
200
%S※2ユーザのセッションID
(セッションIDがない場合は「-」となる)
00455AFE4DA4E7B7789F247B8FE5D605
%tWebクライアントからのリクエストの処理を開始した時刻
(単位:秒,出力形式:dd/MMM/YYYY:HH:mm:ss Z)
[18/Jan/2005:13:06:10 +0900]
%TWebクライアントのリクエストの処理に掛かった時間
(単位:秒)
2
%dWebクライアントからのリクエストの処理を開始した時刻
(単位:ミリ秒,出力形式:dd/MMM/YYYY:HH:mm:ss.nnn Z(nnnはミリ秒))
[18/Jan/2005:13:06:10.152 +0900]
%DWebクライアントのリクエストの処理に掛かった時間
(単位:ミリ秒)
2000
%uBasic認証ユーザ名,Form認証ユーザ名
(認証ユーザ名がない場合は「-」となる)
user
%Uリクエストファイルパス/index.html
%vJ2EEサーバのローカルホスト名server
%{foo}i※3リクエストヘッダfooの内容
(fooヘッダが存在しない場合は「-」となる)
%{Host}iの場合www.example.com:8888
%{foo}cWebクライアントが送信したCookie情報でCookieの名前がfooの内容
(Cookieの名前にfooがない場合は「-」となる)
%{JSESSIONID}cの場合00455AFE4DA4E7B7789F247B8FE5D605
%{foo}o※3レスポンスヘッダfooの内容
(fooヘッダが存在しない場合は「-」となる)
%{Server}oの場合CosminexusComponentContainer
注※1
リモートログ名は,RFC 1413で規定されているIdentificationプロトコルで取得できるWebクライアント側のユーザ名です。
注※2
%Sで表示されるセッションIDは,Cookie名「JSESSIONID」の値です。メモリセッションフェイルオーバ機能でのグローバルセッションIDとは異なります。グローバルセッションIDを出力させたい場合には,%{GSESSIONID}cを指定してください。GIDCookieNameを変更した場合は,変更したGIDCookieNameの値を指定してください。
注※3
一度のHTTPリクエストまたはHTTPレスポンスで同じヘッダ名を複数回送信する場合があります。この場合,最初に読み込んだヘッダの内容を出力します。

注意
フォーマットの引数の指定に誤りがある場合には,デフォルトフォーマットが使用されます。デフォルトフォーマットが使用される例を次に示します。
  • フォーマットの引数の一覧にない文字列(例:%Gなど)を指定した場合
  • リクエストヘッダの内容,レスポンスヘッダの内容,Cookie名で0文字(%{}iなど)を指定した場合
参考
デフォルトフォーマットと拡張フォーマットをフォーマットの引数で記述すると,次のような形式になります。
  • デフォルトフォーマット
    %h %l %u %t "%r" %>s %b
  • 拡張フォーマット
    %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"