7.11.2 NIO HTTPサーバのアクセスログのカスタマイズ
NIO HTTPサーバでは,アプリケーション開発のサポート,運用時の性能解析,および障害発生時のトラブルシュートのために,アクセスログおよび性能解析トレースを出力します。これらのファイルは,ファイル面数やファイルサイズなどを変更できます。また,アクセスログでは,ログの出力形式をカスタマイズできます。
ここでは,NIO HTTPサーバのアクセスログの出力形式のカスタマイズについて,HTTPのアクセスログとWebSocketのアクセスログに分けて説明します。HTTPのアクセスログのファイル面数やファイルサイズなどの変更については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「3.3.9 NIO HTTPサーバのログ取得の設定」を参照してください。WebSocketのアクセスログのファイル面数やファイルサイズなどの変更については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「3.3.18 WebSocketコンテナのログ取得の設定」を参照してください。
- 〈この項の構成〉
(1) HTTPのアクセスログ
HTTPのアクセスログの出力形式のカスタマイズについて説明します。
(a) 設定方法
HTTPのアクセスログの出力形式は,簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に次のパラメタを指定します。
- ejbserver.logger.access_log.nio_http.format
-
NIO HTTPサーバで扱うHTTPのアクセスログのフォーマットの形式を指定します。
簡易構築定義ファイル,および指定するパラメタの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「4.3 簡易構築定義ファイル」を参照してください。
(b) 設定例
HTTPのアクセスログの出力形式の設定例を次に示します。
: <param> <param-name>ejbserver.logger.access_log.nio_http.format</param-name> <param-value>%a %A</param-value> </param> :
この設定例では,WebクライアントのIPアドレスとJ2EEサーバのIPアドレスが出力されます。
(c) 指定できるフォーマット引数
HTTPのアクセスログの出力形式を定義するときに指定する,アクセスログのフォーマットの引数を次の表に示します。
フォーマットの引数 |
出力内容 |
出力例 |
---|---|---|
%a |
WebクライアントのIPアドレス。 |
10.20.30.40 |
%A |
J2EEサーバのIPアドレス。 |
10.20.30.100 |
%b |
HTTPヘッダを除く送信バイト数。 0 byteのときは「-」になる。 |
2048 |
%B |
HTTPヘッダを除く送信バイト数。 0byteのときは「0」になる。 |
1024 |
%h |
Webクライアントのホスト名またはIPアドレス。 ホスト名が得られない場合はIPアドレスになる。 |
10.20.30.40 |
%H |
リクエストプロトコル。 |
HTTP/1.1 |
%l |
リモートログ名。 常に「-」になる※1。 |
- |
%m |
リクエストメソッド |
GET |
%p |
Webクライアントからのリクエストを受け付けたポート番号。 |
80 |
%q |
クエリ文字列。 「?」から始まる。 クエリ文字列がない場合は空文字になる。 |
?id=100&page=15 |
%r |
リクエストライン。 |
GET /index.html HTTP/1.0 |
%s |
最終ステータスコード。 |
200 |
%S※2 |
クッキー名JSESSIONIDの値を出力する。 クッキー名JSESSIONIDの値がない場合は「-」になる。 |
00455AFE4DA4E7B7789F247B8FE5D605 |
%t |
Webクライアントのリクエスト処理を開始した時刻を秒精度で表示。 [dd/MMM/YYYY:HH:mm:ss Z] |
[18/Jan/2005:13:06:10 +0900] |
%T |
Webクライアントのリクエストの処理に要した時間(秒単位)。 |
2 |
%d |
Webクライアントのリクエスト処理を開始した時刻をミリ秒精度で表示。 [dd/MMM/YYYY:HH:mm:ss.nnn Z](nnnはミリ秒) |
[18/Jan/2005:13:06:10.152 +0900] |
%D |
Webクライアントのリクエストの処理に要した時間(ミリ秒単位)。 |
38 |
%u |
ベーシック認証ユーザ名,フォーム認証ユーザ名。 認証ユーザ名がない場合は「-」になる。 |
user |
%U |
リクエストファイルパス。 |
/index.html |
%v |
J2EEサーバのローカルホスト名。 |
server |
%{foo}i※3 |
リクエストヘッダfooの内容。 fooヘッダが存在しない場合は「-」になる。 |
%{Host}iの場合 www.example.com:8888 |
%{foo}c |
Webクライアントが送信したCookie情報でCookieの名前がfooの内容を表示する。 Cookieの名前にfooがない場合は「-」になる。 |
%{MYSESSIONID}cの場合 00455AFE4DA4E7B7789F247B8FE5D605 |
%{foo}o※3 |
レスポンスヘッダfooの内容。 fooヘッダが存在しない場合は「-」になる。 |
%{Server}oの場合 CosminexusComponentContainer |
%rootap |
ルートアプリケーション情報。 |
10.100.10.100/1234/0x0000000000000001 |
%clport |
Webクライアントからのリクエストを送信したポート番号。 |
888 |
- 注※1
-
リモートログ名は,RFC1413で規定されているIdentificationプロトコルによって得られるWebクライアント側のユーザ名です。
- 注※2
-
%Sで表示される値は,標準でHTTPセッションIDとして使用するクッキー名JSESSIONIDの値です。Servlet3.0以降でクッキー名JSESSIONIDの名前を変更した場合は,%{foo}cを使用します。
- 注※3
-
一度のHTTPリクエストまたはHTTPレスポンスで同じヘッダ名を複数回送信する場合があります。この場合,すべてのヘッダの内容を「,」(コンマ)区切りで出力します。
- 注意事項
-
フォーマットの引数の指定に誤りがある場合には,デフォルトフォーマットが使用されます。デフォルトフォーマットが使用される例を次に示します。
-
フォーマットの引数の一覧にない文字列(例:%Gなど)を指定した場合
-
リクエストヘッダの内容,レスポンスヘッダの内容,Cookie名で0文字(%{}iなど)を指定した場合
-
(d) デフォルトフォーマット
HTTPのアクセスログのデフォルトフォーマットを次に示します。
%h %{X-Forwarded-For}i %l %u %d %rootap "%r" %s %b %D %S
デフォルトフォーマットを用いた出力形式を次に示します。
Webクライアントのホスト名またはIPアドレス△X-Forwarded-Forヘッダ△リモートログ名△認証ユーザ名△Webクライアントのリクエスト処理を開始した時刻△ルートアプリケーション情報△”リクエストライン”△最終ステータスコード△HTTPヘッダを除く送信バイト数△Webクライアントのリクエストの処理に要した時間△HTTPセッションID |
デフォルトフォーマットを用いた場合の出力例を次に示します。
10.20.30.40 50.60.70.80 - user [18/Jan/2005:13:06:10.152 +0900] 10.100.10.100/1234/0x0000000000000001 "GET /index.html HTTP/1.0" 200 1024 38 00455AFE4DA4E7B7789F247B8FE5D605
(2) WebSocketのアクセスログ
WebSocketのアクセスログの出力形式のカスタマイズについて説明します。
(a) 設定方法
WebSocketのアクセスログの出力形式は,簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に次のパラメタを指定します。
- ejbserver.logger.access_log.websocket.format
-
NIO HTTPサーバで扱うWebSocketのアクセスログのフォーマットの形式を指定します。
簡易構築定義ファイル,および指定するパラメタの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「4.3 簡易構築定義ファイル」を参照してください。
(b) 設定例
WebSocketのアクセスログの出力形式の設定例を次に示します。
: <param> <param-name>ejbserver.logger.access_log.websocket.format</param-name> <param-value>%TS %IO %PAYLOADDATALEN</param-value> </param> :
この設定例では,WebSocketフレームの送受信時刻,送受信方向,ペイロードデータ長が出力されます。
(c) 指定できるフォーマット引数
WebSocketのアクセスログの出力形式を定義するときに指定する,アクセスログのフォーマットの引数を次の表に示します。
フォーマットの引数 |
出力内容 |
出力例 |
---|---|---|
%TS |
WebSocketフレームの送受信時刻。 |
2001/01/01 01:01:01.111 +0900 |
%IO |
WebSocketフレームの送受信方向。INまたはOUTが出力される。
|
IN |
%OPCODE |
WebSocketフレームの種別。Text,Binary,Ping,Pong,またはCloseが出力される。 |
Text |
%URI |
リクエストURI。 |
/websocket_server/test001 |
%FIN |
WebSocketフレームの終端を示す識別子。CONTまたはFINALが出力される。
|
CONT |
%PAYLOADDATALEN |
ペイロードデータ長。 |
100 |
%ROOTAP |
ルートアプリケーション情報。 |
10.100.10.100/1234/0x0000000000000001 |
%CLIENTAP |
クライアントアプリケーション情報。 |
10.100.10.100/1234/0x0000000000000001 |
%CLOSEREASON |
WebSocketコネクションが切断された理由。 |
NORMAL_CLOSURE:closereason specified by WebSocketClient001 |
%CLIENTADDR |
WebクライアントのIPアドレスとポート番号。 |
10.20.30.40:55555 |
%SERVERADDR |
J2EEサーバのIPアドレスとポート番号。 |
10.20.30.100:44444 |
%SESSIONID |
WebSocketセッションID。 |
11111111-2222-3333-4444-555555555555 |
%MASK |
WebSocketフレームの情報に設定されたMASKを表す。
|
MASK |
%MASKKEY |
WebSocketフレームの情報をMASKするためのキー。 MASKしない場合は「-」になる。 |
EEEEEEEE |
%ISEXTENDED |
エンドポイントがメッセージの送受信に設定されたフレームを表す。
|
BASE |
%RSV |
拡張のネゴシエーション中にクライアントエンドポイントによって設定された予約ビットを表す。 |
RSV-000 |
%FRAMEMAINTYPE |
WebSocketフレームがデータフレームかコントロールフレームかを指定する。
|
Data |
%PAYLOADDATA※ |
ペイロードデータ。 データのサイズが65536文字を超える場合,最初と最後の32768文字だけを表示する。 バイナリの場合は常に「-」になる。 |
aaaaaa |
%PAYLOADDATA(n)※ |
メッセージの最初と最後のn文字分だけを表示する場合のペイロードデータ。 nは1〜32768の整数が指定できる。 バイナリの場合は常に「-」になる。 |
aaaaaaaaaa....aaaaaaaaaa |
- 注意事項
-
フォーマットの引数の指定に誤りがある場合には,デフォルトフォーマットが使用されます。デフォルトフォーマットが使用される例を次に示します。
-
フォーマットの引数の一覧にない文字列(例:%Gなど)を指定した場合
-
%PAYLOADDATA(n)のnに指定可能範囲外の文字列を指定した場合
-
%PAYLOADDATAと%PAYLOADDATA(n)を同時に指定した場合
-
(d) デフォルトフォーマット
WebSocketのアクセスログのデフォルトフォーマットを次に示します。
%TS %IO %OPCODE %ROOTAP %URI %FIN %PAYLOADDATALEN %CLIENTAP %CLOSEREASON
デフォルトフォーマットを用いた出力形式を次に示します。
WebSocketフレームの送受信時刻△WebSocketフレームの送受信方向△WebSocketフレームの種別△ルートアプリケーション情報△リクエストURI△WebSocketフレームの終端を示す識別子△ペイロードデータ長△クライアントアプリケーション情報△WebSocketコネクションが切断された理由 |
デフォルトフォーマットを用いた場合の出力例を次に示します。
2020/01/01 01:01:01.111 +0900 IN Text 10.100.10.100/1234/0x0000000000000001 /websocket_server/test001 CONT 100 10.100.10.100/1234/0x0000000000000003 -