Apacheで出力されるログを変更する方法 レスポンスにかかった時間やリファラ、ユーザーエージェントを記録する

[参考記事] ログをリアルタイムに表示させて監視する方法
Apacheのログは標準では次のような設定になっています。

/etc/httpd/conf/httpd.conf

CustomLog logs/access_log common
または
CustomLog logs/access_log combined

このcommonやcombinedはLogFormatで指定されているフォーマット(書式)で、次のように設定されています。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

つまりcommonを指定すると簡易なログ、combinedを指定するとリファラやユーザーエージェントが記録されます。

例えば次のようにするとレスポンスにかかった時間がログに残ります。

LogFormat "%h %l %u %t \"%r\" %>s %b %T" responsetime
CustomLog logs/access_log responsetime

カスタムログの書式

フォーマット文字列説明
%%パーセント記号
%aリモート IP アドレス
%Aローカル IP アドレス
%Bレスポンスのバイト数。HTTP ヘッダは除く。
%bレスポンスのバイト数。HTTP ヘッダは除く。CLF 書式。 すなわち、1 バイトも送られなかったときは 0 ではなく、 '-' になる
%{Foobar}Cサーバに送られたリクエスト中のクッキー Foobar の値
%Dリクエストを処理するのにかかった時間、マイクロ秒単位
%{FOOBAR}e環境変数 FOOBAR の内容
%fファイル名
%hリモートホスト
%Hリクエストプロトコル
%{Foobar}iサーバに送られたリクエストの Foobar: ヘッダの内容
%l(identd からもし提供されていれば) リモートログ名。 これは mod_ident がサーバに存在して、 IdentityCheck ディレクティブが On に設定されていない限り、 - になります。
%mリクエストメソッド
%{Foobar}n他のモジュールからのメモ Foobar の内容
%{Foobar}o応答の Foobar: ヘッダの内容
%pリクエストを扱っているサーバの正式なポート
%{format}pサーバがリクエストを処理しているポートの公式 (訳注: canonical) のポート番号か、 サーバの実際のポート番号か、クライアント側の実際のポート番号かです。 format に使える文字列は canonical, local, remote になります。
%Pリクエストを扱った子プロセスのプロセス ID
%{format}Pリクエストを扱ったワーカーのプロセス ID かスレッド ID。 format として有効な値は pid, tid, hextid です。hextid を使うには APR 1.2.0 以降が必要です。
%q問い合せ文字列 (存在する場合は前に ? が追加される。 そうでない場合は空文字列)
%rリクエストの最初の行
%sステータス。内部でリダイレクトされたリクエストは、元々の リクエストのステータス --- 最後のステータスは %>s
%tリクエストを受付けた時刻。 CLF の時刻の書式 (標準の英語の書式)
%{format}tformat で与えられた書式による時刻。format は strftime (3) の 書式である必要がある。(地域化されている可能性がある)
%Tリクエストを扱うのにかかった時間、秒単位
%uリモートユーザ (認証によるもの。ステータス (%s) が 401 のときは意味がないものである可能性がある)
%Uリクエストされた URL パス。クエリ文字列は含まない
%vリクエストを扱っているサーバの正式な ServerName
%VUseCanonicalName の設定によるサーバ名
%X応答が完了したときの接続ステータス:
X応答が完了する前に接続が異常終了
+応答が送られた後に接続を持続することが可能
-応答が送られた後に接続が切られる
(このディレクティブは Apache 1.3 の後期のバージョンでは %c に割り当てられて いましたが、これは歴史的に ssl が使用している %{var}c 構文と衝突していました。)
%Iリクエストとヘッダを含む、受け取ったバイト数。 0 にはならない。 これを使用するためには mod_logio が必要
%Oヘッダを含む、送信したバイト数。0 にはならない。 これを使用するためには mod_logio が必要

関連記事

スポンサーリンク

「VCRUNTIME140_1.dllが見つからないため、コードの実効を続行できません」の対処法

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る