Apache HTTP サーバ バージョン 2.1
説明: | サーバへのリクエストのロギング |
---|---|
ステータス: | Base |
モジュール識別子: | log_config_module |
ソースファイル: | mod_log_config.c |
このモジュールはクライアントのリクエストを柔軟にログ収集する機能を 提供します。ログはカスタマイズ可能な書式で書かれ、ファイルに直接 書いたり、外部プログラムに渡したりすることができます。個々のリクエストを 特徴に応じてログに書いたり書かなかったりできるように、条件による ログ収集も提供されています。
このモジュールは三つのディレクティブ提供します:
ログファイルを作成するための TransferLog
,
新しい書式を 定義する LogFormat
,
ログファイルと 書式を一度に定義する CustomLog
です。
各リクエストが複数回ログ収集されるようにするために
TransferLog
ディレクティブと
CustomLog
ディレクティブは複数回使用することができます。
LogFormat
ディレクティブと
CustomLog
ディレクティブの書式を指定する引数は文字列です。この文字列を使ってそれぞれの
リクエストがログファイルにログ収集されます。その文字列には
ログファイルにそのまま
書かれる文字列や、それぞれ改行とタブを現す C 言語
形式の制御文字 "\n" と "\t"
とを含めることができます。そのまま出力させたい引用符とバックスラッシュは
バックスラッシュでエスケープする必要があります。
リクエストの特徴そのものは "%
"
ディレクティブを書式の文字列に書くことで
ログ収集されます。"%"
ディレクティブはログファイル中では以下のような
値で置換されます:
フォーマット文字列 | 説明 | ||||||
---|---|---|---|---|---|---|---|
%% |
パーセント記号 | ||||||
%...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 |
リクエストを扱っているサーバの正式なポート | ||||||
%...P |
リクエストを扱った子プロセスのプロセス ID | ||||||
%...{format}P |
リクエストを扱ったワーカーのプロセス ID かスレッド ID。
format として有効な値は pid と tid
| ||||||
%...q |
問い合せ文字列 (存在する場合は前に ? が追加される。
そうでない場合は空文字列) | ||||||
%...r |
リクエストの最初の行 | ||||||
%...s |
ステータス。内部でリダイレクトされたリクエストは、元々の
リクエストのステータス --- 最後のステータスは %...>s
| ||||||
%...t |
時刻。CLF の時刻の書式 (標準の英語の書式) | ||||||
%...{format}t |
format で与えられた書式による時刻。format は
strftime (3) の
書式である必要がある。(地域化されている可能性がある) | ||||||
%...T |
リクエストを扱うのにかかった時間、秒単位 | ||||||
%...u |
リモートユーザ (認証によるもの。ステータス (%s ) が
401 のときは意味がないものである可能性がある)
| ||||||
%...U |
リクエストされた URL パス。クエリ文字列は含まない | ||||||
%...v |
リクエストを扱っているサーバの正式な ServerName | ||||||
%...V |
UseCanonicalName の設定によるサーバ名 | ||||||
%...X |
応答が完了したときの接続ステータス:
(このディレクティブは Apache
1.3 の後期のバージョンでは | ||||||
%...I |
リクエストとヘッダを含む、受け取ったバイト数。
0 にはならない。
これを使用するためには mod_logio が必要 | ||||||
%...O |
ヘッダを含む、送信したバイト数。0 にはならない。
これを使用するためには mod_logio が必要 |
"..." は何もないか (例えば、
"%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
にはそれぞれ、
リクエストを扱っているサーバの正規化された
ServerName
と Listen
が使われるということに注意してください。
これは UseCanonicalName
の
設定に関わらず、常にそうなります。そうしないとどの
ホストが実際にリクエストを扱ったのかを知るために、
ログ解析プログラムがバーチャルホストのマッチングをとるアルゴリズム全体を
再実装しなければならなくなるからです。
ログファイルが保存されているディレクトリがサーバを起動した以外のユーザで 書き込み可能なときにセキュリティの問題が発生する理由の詳細はセキュリティのこつ を参照してください。
説明: | クッキングのロギングのためのファイル名を設定する |
---|---|
構文: | CookieLog filename |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_log_config |
互換性: | このディレクティブは非推奨 |
CookieLog
ディレクティブはクッキーのロギングのためのファイル名を
設定します。filename は ServerRoot
からの相対パスです。このディレクティブは mod_cookies
との互換性のためだけに
存在し、使用は推奨されていません。
説明: | ログファイルの名前と書式を設定する |
---|---|
構文: | CustomLog file|pipe
format|nickname
[env=[!]environment-variable] |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_log_config |
CustomLog
ディレクティブはサーバへのリクエストを
ログ収集するために使われます。ログの書式が指定され、
環境変数を使ってロギングが条件に応じて行なわれるようにすることもできます。
ログが書かれる場所を指定する最初の引数は以下の二つの形式の値を とることができます:
ServerRoot
からの相対パスで表されるファイル名。|
" と、その後に標準入力からログの
情報を受けとるプログラムへのパスが続いたもの。
もしプログラムが使用された場合、
httpd
が起動されたユーザとして実行されます。これはサーバが
root によって起動された場合は root になります。プログラムが
安全であるように留意してください。
Unix でないプラットフォームでファイルのパスを入力しているときは、 使用しているプラットフォームがバックスラッシュの使用を許可していた として、通常のスラッシュだけを使うように気をつけてください。 一般的に、設定ファイル中では常に普通のスラッシュのみを使うようにする 方が良いです。
二つめの引数はログファイルに何が書かれるかを指定します。
前にある LogFormat
ディレクティブにより
定義された nickname か、ログの書式
のところで説明されている、明示的な format 文字列の
どちらかを指定することができます。
例えば、以下の二つのディレクティブ群は全く同じ効果をもたらします:
# CustomLog with format nickname
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
# CustomLog with explicit format string
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
三つ目の引数は省略可能で、サーバの環境にある変数があるかないかに
応じてリクエストをログ収集するかどうかを制御するために使うことができます。
指定された環境変数がリクエストに対して
設定されていた場合 ('env=!name
' 文が使われたときは
設定されていない場合)、リクエストがログ収集されます。
環境変数は mod_setenvif
モジュールと
mod_rewrite
モジュールの両方もしくは
片方を用いてリクエストごとに設定することができます。
例えば、サーバにあるすべての GIF 画像へのリクエストを別のログファイル
には記録したいけれど、メインログには記録したくない、というときは
以下のものを使うことができます:
SetEnvIf Request_URI \.gif$ gif-image
CustomLog gif-requests.log common env=gif-image
CustomLog nongif-requests.log common env=!gif-image
説明: | ログファイルで使用する書式を設定する |
---|---|
構文: | LogFormat format|nickname
[nickname] |
デフォルト: | LogFormat "%h %l %u %t \"%r\" %>s %b" |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_log_config |
このディレクティブはアクセスログファイルの書式を指定します。
LogFormat
ディレクティブは二つの形式のどちらかを
とることができます。最初の形式では一つの引数のみが指定され、
続く TransferLog
で指定されたログで使われるログの書式を設定します。この単独の引数では
上のカスタムログ書式で説明されているように
format を明示的に指定することができます。
もしくは、下で説明されているように前に LogFormat
ディレクティブで定義されたログの書式を nicknameを使って
参照することもできます。
LogFormat
ディレクティブの二つめの形式は
format に nickname を与えます。
フォーマット文字列全体を再び書くかわりに、
この nickname を続きの LogFormat
ディレクティブや
CustomLog
ディレクティブで使うことができます。
Nickname を定義する LogFormat
ディレクティブは
他には何もしません -- すなわち、ニックネームを定義
するだけで、実際に書式を適用してデフォルトにするということは行ないません。
ですから、これは続く TransferLog
ディレクティブには影響を与えません。
さらに、LogFormat
ディレクティブは既存の nickname を
使って別の nickname を定義することはできません。Nickname には
パーセント記号 (%
) が含まれていてはいけないことにも注意
してください。
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
説明: | ログファイルの位置を指定 |
---|---|
構文: | TransferLog file|pipe |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_log_config |
このディレクティブは、ログ書式を直接指定できないことと、
条件付きロギングが無いことを除くと、CustomLog
と全く同じ引数と効果があります。
直接ログ書式を指定する代わりに、ログの書式はそこまでで一番最後に指定された
ニックネームを定義しない
LogFormat
ディレクティブ
で定義されたものを使います。
もし他の書式が全く指定されていないときは Common Log Format
が使われます。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
TransferLog logs/access_log