アクセスログのフォーマット(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リクエストに対するバーチャルホスト名
%VUseCanonicalNameによるサーバ名
%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 )