Posted at

Apacheのログ出力の要点

More than 3 years have passed since last update.


ログフォーマット文字列

以下がApacheのログフォーマットに使用する文字列です。

私個人が重要だと思う順で並べてます。

フォーマット文字列
意味

%t
リクエスト時刻

%a
リモートIPアドレス

%>s
HTTPステータス

%D
リクエスト処理にかかった時間(マイクロ秒)

%m
リクエストメソッド

%U
URLのパス部分。クエリ文字列は含まない

%q
クエリストリング

%{Referer}i
リファラ

%{User-Agent}i
ユーザーエージェント

%{Foobar}i
リクエスト中のFoobar*ヘッダの内容。よく使うものは後述。

%{Foobar}C
リクエスト中のFoobarクッキーの値

%I
受信バイト数(ヘッダ含む)。利用にはmod_logioが必要。l(エル)ではなくI(アイ)

%O
送信バイト数。利用にはmod_logioが必要

%b
レスポンスのバイト数(HTTPヘッダは除く)。CLFフォーマット、つまり1バイトとも送られなかった場合は-になる

%B
レスポンスのバイト数(HTTPヘッダは除く)。

%A
ローカルIPアドレス

%f
URLから導き出されたファイルシステム上のファイル名。このファイル名のファイルが存在するとは限らない。

%s
HTTPステータス。内部でリダイレクトされた場合は最初のステータス

%{FOOBAR}e
環境変数FOOBARの値

%H
リクエストプロトコル

%{Foobar}o
レスポンス中のFoobarヘッダの内容

%p
サーバーのポート

%P
リクエストを処理した子プロセスのプロセスID

%{format}t
リクエスト時刻(formatで指定した書式)

%T
リクエスト処理にかかった時間(秒)

%v
サーバー名(ServerName)

%V
サーバー名(UseCanonicalNameの設定によるもの)

%l
リモートログ名。mod_identを使っていない限り-になる。I(アイ)ではなくl(エル)。

%u
Basic認証のユーザー名

%h
クライアントのホスト名またはIPアドレス。HostnameLookupsOnに設定されている場合のみホスト名の解決を試みる

%r
リクエストの最初の行

%X
応答が完了した時の接続ステータス。(X: 応答完了前に接続が異常終了、+: 応答完了後に接続維持が可能、-: 応答完了後に接続断)

%%
パーセント文字


ログ設定方法

Apacheのログフォーマットはhttpd.confなどに以下のように予め何パターンか定義されています。

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

そして、サーバーの設定やバーチャルホストの設定で、以下のようにログのパスと使用するフォーマットを選びます。

CustomLog logs/access_log common

使用するログのフォーマットは自分で定義することができます。

httpd.confに以下のような行を追記するだけです。

LogFormat "%t %a %>s" ore_no_format

自分で定義したフォーマットを使用するのも、通常のフォーマット同様に以下のようにします。

CustomLog logs/access_log ore_no_format


combinedのログの出力例

202.241.168.146 - - [18/Jan/2015:03:10:20 +0900] "GET /images/logo.png HTTP/1.1" 404 313 "http://tech.artizan.co/index.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"


LTSVで出力する例

私がよく使うのは以下の様にLTSV形式のフォーマットです。

実際は改行はありません。

LogFormat "ts:%t\\t

ip:%a\\t
status:%>s\\t
method:%m\\t
path:%U\\t
query:%q\\t
referer:%{Referer}i\\t
ua:%{User-Agent}i\\t
usec:%D\\t
received:%I\\t
sent:%O" ltsv