カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

apache ログのカスタマイズ

この記事は最終更新日から1年以上経過しています。

apacheでは、デフォルトでアクセスログなどを記録してくれますが
そこに例えばリファラー情報などは含まれません。

apacheの設定ファイルを変更すれば、記録する情報を任意にカスタマイズすることができます。

カスタムログの作成

ここでは例として、リファラー情報とリクエストURLを記録するカスタムログを作成してみます。

httpd.confを開き、<IfModule log_config_module>というディレクティブを探します。

※IfModuleディレクティブは消しておいたほうがいいという説があるようですが、
ここではそれについては割愛します。

デフォルトでは以下のようになっているはずです。(違う場合は環境によると思ってください)

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    #
    # 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
</IfModule>

※combinedという設定が既にリファラーを記録するフォーマットになっていますので、
設定するのが面倒な場合はこちらを使用してください。

リファラー情報を記録するためのフォーマットを記述します。

LogFormat "\"%{%F}t\",\"%{%T}t\",\"%{Referer}i\",\"%U\",\"%h\"" custom_referer

設定したフォーマットでログを記録するよう設定します。

CustomLog logs/referer_log custom_referer

上記の設定で得られるログは以下のようになります。

"2015/01/01","00:00:00","[リファラー情報]","[リクエストURL]","[リモートホスト]"

上記で使用したフォーマット書式

%{format}t 指定した書式の日時(formatはstrftimeの書式)
%{Hoge}i 要求されたリクエストのHogeヘッダーの内容
%U リクエストURL(クエリ文字列は含まない)
%h リモートホスト

その他の書式

%a リモートIPアドレス
%A ローカルIPアドレス
%B HTTPヘッダー以外の送信されたバイト数
%b HTTPヘッダー以外の送信されたバイト数(CLF書式)。1バイトも送られなかったときは「-」
%{Hoge}c サーバーに送られたリクエスト中のクッキーHogeの値
%D リクエストを処理するのにかかった時間(単位:マイクロ秒)
%{HOGE}e 環境変数HOGEの内容
%f ファイル名
%H リクエストプロトコル
%l リモートログ名
%m リクエストメソッド
%{Hoge}n 他のモジュールからのメモHogeの内容
%{Hoge}o 応答のHogeヘッダーの内容
%p リクエストを扱っているサーバーの正式なポート
%P リクエストを扱った子プロセスのプロセスID
%{format}P リクエストを扱ったワーカーのプロセスIDかスレッドID。formatとして有効な値はpidとtid
%q クエリー文字列(存在する場合は頭に?が付きます)
%r リクエストの最初の行
%s ステータス。内部でリダイレクトされたリクエストは元々のステータス。最後のステータスは%>s
%t 時刻
%T リクエストを扱うのにかかった時間(単位:秒)
%u リモートユーザー(認証によるもの)。ステータス(%s)が401のときは意味がない可能性がある)
%v リクエストを扱っているサーバーの正式なServerName
%V UseCanonicalNameの設定によるサーバー名
%X 応答が完了したときの接続ステータス
X=:応答が完了する前に接続が異常終了
+=:応答が送られた後に接続を維持することが可能
-=:応答が送られた後に接続が切られる
%I リクエストヘッダーを含む受け取ったバイト数。0にはならない。使用するにはmod_logioが必要。
%O ヘッダーを含む送信したバイト数。0にはならない。これを使用するためにはmod_logioが必要
この記事がお役に立ちましたらシェアお願いします
5,927 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です