アクセスログのフォーマット(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 )

AdminWeb