このモジュールはクライアントのリクエストを柔軟にログ収集する機能を 提供します。ログはカスタマイズ可能な書式で書かれ、ファイルに直接 書いたり、外部プログラムに渡したりすることができます。個々のリクエストを 特徴に応じてログに書いたり書かなかったりできるように、条件による ログ収集も提供されています。
このモジュールは三つのディレクティブ提供します:
ログファイルを作成するための
リクエストの特徴そのものは "%
"
ディレクティブを書式の文字列に書くことで
ログ収集されます。"%"
ディレクティブはログファイル中では以下のような
値で置換されます:
フォーマット文字列 | 説明 | ||||||
---|---|---|---|---|---|---|---|
%% |
パーセント記号 (Apache 2.0.44 以降) | ||||||
%...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 |
リクエストを扱っているサーバの正式なポート | ||||||
%...P |
リクエストを扱った子プロセスのプロセス ID | ||||||
%...{format}P |
リクエストを扱ったワーカーのプロセス ID かスレッド ID。
format として有効な値は pid と tid
(Apache 2.0.46 以降)
| ||||||
%...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 にはならない。
これを使用するためには |
"..." は何もないか (例えば、
"%h %u %r %s %b"
のように)、
その項目を含めるかどうかの条件 (もし条件に合わなかったときは
その項目は "-" になります) にすることができます。条件の形式は
HTTP ステータスコードのリストで、前に "!" を付けることもできます。
ですから、"%400,501{User-agent}i" は 400 エラーと 501 エラー
(Bad Request と Not Implemented) のときのみ User-agent:
をログ収集します。
"%!200,304,302{Referer}i" は普通のステータスを返さなかった
すべてのリクエストで Referer:
をログ収集します。
修飾子 "<" と ">" は内部リダイレクトされたリクエストのログに
元のリクエストか最終的なリクエストのどちらを使用するかを
指定するために使います。デフォルトでは、%
ディレクティブの
%s, %U, %T, %D, %r
は元のリクエストを、他は最終的なリクエストを
使用します。例えば、リクエストの最終ステータスを記録するには
%>s
を、内部的に認証されていないリソースへリダイレクトされた
リクエストで元のリクエストで認証されたユーザを記録するためには
%<u
を使うことができます。
httpd 2.0 の 1.3.25 より前のバージョンでは、
%...r
, %...i
,
%...o
の文字列は
エスケープされていなかったことに
注意してください。これは主に Common Log Format からの要求によるものです。
これは、クライアントがログに制御文字を挿入することができるということで、
生のログファイルを扱うときには非常に注意が必要でした。
セキュリティ上の理由により 2.0.46 より印字不可能な文字と
他の特別な文字は、ほとんど \xhh
という
文字列でエスケープされるようになりました。ここで、hh は
そのままのバイトの値の 16 進での値です。この規則の例外には、
バックスラッシュを使ってエスケープされる "
と \
と、
C 形式の表記法が使われる空白文字 (\n
, \t
など) が
あります。
よく使われるフォーマット文字列は:
"%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"
%v
と %p
にはそれぞれ、
リクエストを扱っているサーバの正規化された
ログファイルが保存されているディレクトリがサーバを起動した以外のユーザで 書き込み可能なときにセキュリティの問題が発生する理由の詳細はセキュリティのこつ を参照してください。
mod_cookies
との互換性のためだけに
存在し、使用は推奨されていません。
ログが書かれる場所を指定する最初の引数は以下の二つの形式の値を とることができます:
|
" と、その後に標準入力からログの
情報を受けとるプログラムへのパスが続いたもの。
もしプログラムが使用された場合、 httpd が起動されたユーザとして実行されます。これはサーバが root によって起動された場合は root になります。プログラムが 安全であるように留意してください。
Unix でないプラットフォームでファイルのパスを入力しているときは、 使用しているプラットフォームがバックスラッシュの使用を許可していた として、通常のスラッシュだけを使うように気をつけてください。 一般的に、設定ファイル中では常に普通のスラッシュのみを使うようにする 方が良いです。
二つめの引数はログファイルに何が書かれるかを指定します。
前にある
例えば、以下の二つのディレクティブ群は全く同じ効果をもたらします:
三つ目の引数は省略可能で、サーバの環境にある変数があるかないかに
応じてリクエストをログ収集するかどうかを制御するために使うことができます。
指定された環境変数がリクエストに対して
設定されていた場合 ('env=!name
' 文が使われたときは
設定されていない場合)、リクエストがログ収集されます。
環境変数は
このディレクティブはアクセスログファイルの書式を指定します。
%
) が含まれていてはいけないことにも注意
してください。
このディレクティブは、ログ書式を直接指定できないことと、
条件付きロギングが無いことを除くと、