[APACHE DOCUMENTATION]

Apache HTTP Server Version 1.3

Module mod_log_config

このモジュールは mod_log_config.c ファイルに含まれ、Apache 1.2ではデフォルトでコンパイルされます。 mod_log_config は Apache1.2 の mod_log_common を置き換えたものです。バージョン 1.2 以前では、mod_log_config はオプションモジュールでした。 Common Log Format や ユーザ指定のフォーマットを使って、サーバへのリクエストをログします。

概要

このモジュールには3つの directive があります: ログファイルを作る TransferLog、カスタムのフォーマットを設定する LogFormat、 ログファイル名とフォーマットを一緒に定義する CustomLog です。 TransferLogCustomLog はそれぞれのリクエストが様々なファイルにログされるサーバで、多重的に使われます。

互換性について

Log File Formats

LogFormat に何も指定しなければ、TransferLog によって生成されるログファイルは、標準的な "Common Log Format" (CLF) になります。 CLF ファイルにある、それぞれの行の内容は以下に記述されています。もう一つの方法として、ログファイルはカスタマイズすることができます(もし様々なログファイルが使われれば、それぞれが異なるフォーマットを持つことができます)。カスタムのフォーマットは LogFormatCustomLog で設定します。

Common Log Format

Common Log Format (CLF) ファイルはそれぞれのリクエストを1行で格納しています。行はスペースで区切られた項目によって構成されています:
host ident authuser date request status bytes
もし項目に入れる値がないときは、ハイフン(-)で表現されます。 それら項目の意味と値は以下の通りです:
host
FQDN 形式のクライアント名。またはクライアント名が利用できない時には IP アドレス。
ident
もし IdentityCheck が有効になっていてクライアントマシンで identd が動作している場合の、クライアントから返される個人情報。
authuser
保護するドキュメントにパスワード要求を行った場合、使用されたユーザID。
date
リクエストの日付。書式は次の通り:
date = [day/month/year:hour:minute:second zone]
day = 2 桁
month = 3 文字
year = 4 桁
hour = 2 桁
minute = 2 桁
second = 2 桁
zone = (`+' | `-') 4 桁
request
ダブルクォート(")によって囲まれたクライアントからのリクエスト内容。
status
クライアントに返す3桁のリターンコード。
bytes
クライアントに転送したオブジェクトのバイト数。この中にヘッダ情報は含みません。

Custom Log Formats

LogFormatCustomLog の書式は文字列です。 この文字列は、それぞれのリクエストをログファイルに格納します。 指定した文字をログファイルに含めることが出来、また `%' directive は以下の値に置き換えられます:
%...b:          HTTP ヘッダを除く転送量(Bytes)
%...f:          ファイル名
%...{FOOBAR}e:  環境変数 FOOBAR のコンテンツ
%...h:          リモートホスト名
%...a:          リモート IP アドレス
%...{Foobar}i:  Foobar のコンテンツ: サーバに送信されるリクエストにあるヘッダ行
%...l:          リモートログ名 (identd をクライアントがサポートしている時)
%...{Foobar}n:  他のモジュールからのノート "Foobar" のコンテンツ
%...{Foobar}o:  Foobar のコンテンツ: リプライにあるヘッダ行
%...p:          リクエストを受けたポート
%...P:          リクエストを受けたサーバプロセスのプロセス ID
%...r:          リクエストの最初の行
%...s:          ステータス。内部リダイレクトしたリクエストのための、*original* リクエストのステータスです --- %...>s が最新です。
%...t:          common log format 時間形式で表示する時間
%...{format}t:  strftime(3) 形式で示される時間
%...T:          リクエストを処理するのに要する時間(秒)
%...u:          リモートユーザ (認証から; 返すステータス(%s) が 401 なら、偽かもしれません)
%...U:          リクエストされた URL パス。
%...v:          サーバがリクエストを処理する正統な ServerName
%...V:          UseCanonicalName の設定によるサーバ名
`...'は何も入れない(例えば "%h %u %r %s %b")か、状態を表すために付加するアイテム(いずれの場合でも、コンディションが得られない時は`-'となります)文字列 %r, %...i,%...o;にはエスケープが効きませんので注意してください; 古い記憶ですが、全て URL-エスケープするか、CLF をやめない限りは、以前はエスケープが便利に感じたのですが、全ての`%..i'を正しく解読することが困難なので良くないと思います。

コンディションのフォームは `!' が前に付く、HTTP ステータス・コードのリストです。このような `%400,501{User-agent}i' logs User-agent: 400 error と 501 error (Bad Request, Not Implemented) のみ; `%!200,304,302{Referer}i' logs Referer: 全てのリクエストに、通常のステータスを返さない

もし望むなら(例えば、最後に拡張フィールドを追加するために)、common log format は、フォーマットを拡張して使うことができる、"%h %l %u %t \"%r\" %s %b" という文字列によって定義されていることに気を付けてください。拡張され、組み合わされた NCSA ログフォーマットは "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" です。

正統な ServerName と サーバがリクエストを処理する Port は、それぞれ %v%p のために使われます。これは UseCanonicalName の設定とは関係なく発生します。そうしないと、ログ分析プログラムは、リクエストを本当に処理しているホストが何かを決定するために、完全な vhost が一致するアルゴリズムを作らなければなりません。

多重ログファイルを使う

TransferLogCustomLog directive は要求されたログを複数のファイルに出力できます。 それぞれのリクエストはこれらの directive で定義できます。

Virtual Host の使用

<VirtualHost> のセクションに TransferLogCustomLog directive がなければ、メインサーバのために定義されたログが使われます。 これらの directive を一つ以上持っていれば、この virtual host によって処理されるリクエストはメインサーバのログファイルではなく、その定義に従って virtual host のログファイルに出力します。以下の例を見てください。

セキュリティの考察

サーバを起動するユーザではないユーザに対して、ログファイルのあるディレクトリの書き込みが許可されているとなぜセキュリティが甘くなるのかは、セキュリティ情報 を見てください。

Directives


CookieLog

Syntax: CookieLog filename
Context: server config, virtual host
Module: mod_cookies
Compatibility: Only available in Apache 1.2 and above

CookieLog命令はクッキーのログファイル名を指定します。ファイル名は ServerRoot の相対パスです。 この命令はmod_cookiesとの互換性のためだけに付加されており、価値は下がってきています。


CustomLog

Syntax: CustomLog file-pipe format-or-nickname
Context: server config, virtual host
Status: Base
Compatibility: Nickname only available in Apache 1.3 or later
Module: mod_log_config

最初の項目はログを行うファイル名です。 これはちょうど TransferLog と同じです; フルパスか、対象のサーバのルートからの相対パスで指定します。

フォーマットの引数はログファイルのそれぞれの行のフォーマットを指定します。フォーマットのオプションの利用は、LogFormat directive の引数とちょうど同じです。もしフォーマットになんらかのスペースがあれば(ほとんど全ての場合)、ダブルクウォートで囲まれます。

実際のフォーマット文字列の代わりに、LogFormat directive で定義されるフォーマットのニックネームを使うことができます。


CustomLog (conditional)

Syntax: CustomLog file-pipe format-or-nickname env=[!]environment-variable
Context: server config, virtual host
Status: Base
Compatibility: Only available in Apache 1.3.5 or later
Module: mod_log_config

CustomLog directive 形式の働きは standard CustomLog directive とそっくりです。 違いは、特定のリクエストが指定されたファイルにログされるかどうかを 'env=' が制御することです。指定された環境変数がリクエストに対して設定されると(あるいは '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

Syntax: LogFormat format [nickname]
Default: LogFormat "%h %l %u %t \"%r\" %s %b"
Context: server config, virtual host
Status: Base
Compatibility: Nickname only available in Apache 1.3 or later
Module: mod_log_config

これは TransferLog directive によって名前が付けられたデフォルト・ログファイルのフォーマットを設定します。 フォーマットの引数の詳細に関しては、Custom Log Formats セクションを見てください。

directive 行にあるフォーマットにニックネームがあると、完全なフォーマットの文字列を繰り返すよりも、LogFormatCustomLog directive の順番で使うことができます。

ニックネームを定義する LogFormat directive は以下に他なりません -- つまり、ニックネームを定義するだけで、実際にはフォーマットを適用せず、デフォルトにします。


TransferLog

Syntax: TransferLog file-pipe
Default: none
Context: server config, virtual host
Status: Base
Module: mod_log_config

TransferLog directive は他のデフォルト・フォーマットが指定されていなければ、最新の LogFormat directive か、Common Log Format によって定義されるフォーマットでログファイルを追加します。File-pipe は以下の一つです

A filename
ServerRoot に相対するファイル名
`|' followed by a command
標準入力にあるエージェントログ情報を受け取るプログラム。もしメインサーバから TransferLog を受け継ぐと、新しいプログラムは VirtualHost に対しては起動しなくなることに気を付けてください。
セキュリティ: プログラムが使われると、httpd を起動したユーザとして走ります。 サーバが root によって起動すると、これは root になります; プログラムがセキュアであることを確認してください。


Apache HTTP Server Version 1.3

Index Home