ログフォーマット文字列
以下が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アドレス。HostnameLookupsがOnに設定されている場合のみホスト名の解決を試みる |
| %r | リクエストの最初の行 |
| %X | 応答が完了した時の接続ステータス。(X: 応答完了前に接続が異常終了、+: 応答完了後に接続維持が可能、-: 応答完了後に接続断) |
| %% | パーセント文字 |
ログ設定方法
Apacheのログフォーマットはhttpd.confなどに以下のように予め何パターンか定義されています。
.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