アクセスログのフォーマット(LogFormat)
アクセスログとして保存するデータは自分でカスタマイズして指定することができます。
ログのフォーマットは「LogFormat」に指定します。記述方式は次の通りです。
LogFormat "フォーマット" ログフォーマット名
デフォルトで「httpd.conf」ファイルに記述されているログフォーマットとしては次の2つが定義されています。
LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-Agent}i¥"" combined LogFormat "%h %l %u %t ¥"%r¥" %>s %b" common
ログフォーマット名として「common」と「combined」の2つです。フォーマットは複数の項目の組み合わせによって定義され、設定可能な主な項目は以下の通りです。
設定値 | 意味 |
---|---|
%a | アクセス元のIPアドレス |
%A | サーバ(Apache)のIPアドレス |
%B | 送信されたバイト数(ヘッダーは含まず) |
%b | 送信されたバイト数(ヘッダーは含まず)。0バイトの時は「-」 |
%f | リクエストされたファイル名 |
%h | リモートホスト名 |
%H | リクエストのプロトコル名 |
%l | クライアントの識別子 |
%m | リクエストのメソッド名 |
%q | リクエストに含まれるクエリー文字列。空白以外は「?」が付く。 |
%r | リクエストの最初の行の値 |
%s | レスポンスステータス |
%>S | 最後のレスポンスのステータス |
%t | 時刻 |
%T | 処理にかかった時間 |
%u | 認証ユーザー名 |
%U | リクエストのURLパス |
%v | リクエストに対するバーチャルホスト名 |
%V | UseCanonicalNameによるサーバ名 |
%X | 接続ステータス |
%{クッキー名}C | リクエストに含まれるクッキーの値 |
%{環境変数名}e | 環境変数名の値 |
%{ヘッダー名}i | リクエストに含まれるヘッダー名の値 |
%{ヘッダー名}o | レスポンスに含まれるヘッダー名の値 |
%{メモ}n | モジュールから渡されるメモの値 |
%{フォーマット}t | フォーマットされた時刻 |
これらの項目を列挙しダブルクオーテーション(")で囲って指定します。フォーマット中にダブルクオーテーションを記述する場合は「¥」でエスケープして記述します。
項目の中には{}で囲んで記述される項目があります。例えば「%{ヘッダー名}i」はヘッダーの中からヘッダー名に指定した値だけを取り出して記録します。「%{User-Agent}i」と記述した場合にはヘッダーの中の「User-Agent」の値を保存します。
アクセルログフォーマットの変更テスト
デフォルトで有効になっているアクセスログは「common」です。これをもう一つ用意されている「combined」の方に変更してみましょう。「httpd.conf」ファイルの255行目付近に次のように記述されています。
# # The location and format of the access logfile (Common Logfile Format). # If you do not define any access logfiles within a <VirtualHost> # container, they will be logged here. Contrariwise, if you *do* # define per-<VirtualHost> access logfiles, transactions will be # logged therein and *not* in this file. # CustomLog logs/access.log common # # If you prefer a logfile with access, agent, and referer information # (Combined Logfile Format) you can use the following directive. # #CustomLog logs/access.log combined
「CustomLog logs/access.log common」の前に「#」を付け、代わりに「CustomLog logs/access.log combined」の前の「#」を外します。
# # The location and format of the access logfile (Common Logfile Format). # If you do not define any access logfiles within a <VirtualHost> # container, they will be logged here. Contrariwise, if you *do* # define per-<VirtualHost> access logfiles, transactions will be # logged therein and *not* in this file. # #CustomLog logs/access.log common # # If you prefer a logfile with access, agent, and referer information # (Combined Logfile Format) you can use the following directive. # CustomLog logs/access.log combined
これでアクセスログは「combined」名で定義されたフォーマットで保存されることになります。Apacheを再起動してから、Apacheに適当にアクセスしログを見てください。
上記の赤い四角で囲まれた部分が新しいフォーマットで記録されたログとなります。より詳細な情報が記載されるようになっています。
( Written by Tatsuo Ikura )