このモジュールはクライアントのリクエストを柔軟にログ収集する機能を 提供します。ログはカスタマイズ可能な書式で書かれ、ファイルに直接 書いたり、外部プログラムに渡したりすることができます。個々のリクエストを 特徴に応じてログに書いたり書かなかったりできるように、条件による ログ収集も提供されています。
このモジュールは三つのディレクティブ提供します:
ログファイルを作成するための
リクエストの特徴そのものは "%
"
ディレクティブを書式の文字列に書くことで
ログ収集されます。"%"
ディレクティブはログファイル中では以下のような
値で置換されます:
フォーマット文字列 | 説明 | ||||||
---|---|---|---|---|---|---|---|
%% |
パーセント記号 | ||||||
%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 からもし提供されていれば) リモートログ名。
これは On に設定されていない限り、
- になります。 | ||||||
%m |
リクエストメソッド | ||||||
%{Foobar}n |
他のモジュールからのメモ Foobar の内容 | ||||||
%{Foobar}o |
応答の Foobar: ヘッダの内容 | ||||||
%p |
リクエストを扱っているサーバの正式なポート | ||||||
%{format}p |
サーバがリクエストを処理しているポートの公式
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}t |
format で与えられた書式による時刻。format は
strftime (3) の
書式である必要がある。(地域化されている可能性がある) | ||||||
%T |
リクエストを扱うのにかかった時間、秒単位 | ||||||
%u |
リモートユーザ (認証によるもの。ステータス (%s ) が
401 のときは意味がないものである可能性がある)
| ||||||
%U |
リクエストされた URL パス。クエリ文字列は含まない | ||||||
%v |
リクエストを扱っているサーバの正式な | ||||||
%V |
|||||||
%X |
応答が完了したときの接続ステータス:
(このディレクティブは Apache
1.3 の後期のバージョンでは | ||||||
%I |
リクエストとヘッダを含む、受け取ったバイト数。
0 にはならない。
これを使用するためには | ||||||
%O |
ヘッダを含む、送信したバイト数。0 にはならない。
これを使用するためには |
特定の要素は "%" の直後に HTTP ステータスコードをカンマ区切りで
指定することで、表示を制限することができます。例えば
"%400,501{User-agent}i"
では、
400 と 500 番エラーでのみ User-agent
をログします。
他のステータスコードでは "-"
という文字列が
ログされます。ステータスコードのリストは "!
"
で否定を指定することができます :
"%!200,304,302{Referer}i"
は、指定された
3 つのコードのどれにも該当しないリクエスト全てで
Referer
をログします。
修飾子 "<" と ">" は内部リダイレクトされたリクエストのログに
元のリクエストか最終的なリクエストのどちらを使用するかを
指定するために使います。デフォルトでは、%
ディレクティブの
%s, %U, %T, %D, %r
は元のリクエストを、他は最終的なリクエストを
使用します。例えば、リクエストの最終ステータスを記録するには
%>s
を、内部的に認証されていないリソースへリダイレクトされた
リクエストで元のリクエストで認証されたユーザを記録するためには
%<u
を使うことができます。
セキュリティ上の理由により 2.0.46 より、
%r
, %i
, %o
に入っている、
印字不可能な文字と他の特別な文字は、\xhh
という形式の文字列でエスケープされるようになりました。hh は
そのままのバイトの値の 16 進での値です。この規則の例外には、
バックスラッシュを使ってエスケープされる "
と \
と、
C 形式の表記法が使われる空白文字 (\n
, \t
など)
があります。2.0.46 以前のバージョンではエスケープ処理は行われませんので、
生ログファイルを扱う際に注意が必要です。
httpd 2.0 では 1.3 とは異なり、%b
と %B
フォーマット文字列はクライアントに送信されたバイト数そのものではなく、
HTTP レスポンスのバイト数です (これらは異なるもので、たとえば、
コネクションが途中で破棄された場合や、SSL 使用時に一致しません) 。
%O
フォーマット文字列で、ネットワーク経由で実際に転送されたバイト数を
記録できます。
よく使われるフォーマット文字列は:
"%h %l %u %t \"%r\" %>s %b"
"%v %h %l %u %t \"%r\" %>s %b"
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-agent}i\""
"%{Referer}i -> %U"
"%{User-agent}i"
ログファイルが保存されているディレクトリがサーバを起動した以外のユーザで 書き込み可能なときにセキュリティの問題が発生する理由の詳細はセキュリティのこつ を参照してください。
ログが書かれる場所を指定する最初の引数は以下の二つの形式の値を とることができます:
|
" と、その後に標準入力からログの
情報を受けとるプログラムへのパスが続いたもの。
もしプログラムが使用された場合、
Unix でないプラットフォームでファイルのパスを入力しているときは、 使用しているプラットフォームがバックスラッシュの使用を許可していた として、通常のスラッシュだけを使うように気をつけてください。 一般的に、設定ファイル中では常に普通のスラッシュのみを使うようにする 方が良いです。
二つめの引数はログファイルに何が書かれるかを指定します。
前にある
例えば、以下の二つのディレクティブ群は全く同じ効果をもたらします:
三つ目の引数は省略可能で、サーバの環境にある変数があるかないかに
応じてリクエストをログ収集するかどうかを制御するために使うことができます。
指定された環境変数がリクエストに対して
設定されていた場合 ('env=!name
' 文が使われたときは
設定されていない場合)、リクエストがログ収集されます。
環境変数は
古い RefererIgnore ディレクティブと同じ挙動をさせたい場合は、 次のようにします:
このディレクティブはアクセスログファイルの書式を指定します。
%
) が含まれていてはいけないことにも注意
してください。
このディレクティブは、ログ書式を直接指定できないことと、
条件付きロギングが無いことを除くと、