このモジュールは 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 です。
TransferLog と CustomLog はそれぞれのリクエストが様々なファイルにログされるサーバで、多重的に使われます。
CookieLog directive が組み込まれています。CookieLogの使用は非難されています。
代わりにCustomLog がユーザの足跡情報のログするようにした方が良いでしょう。
RefererIgnore 機能を持っています。RefererIgnore の働きは SetEnvIf directive と条件付き CustomLog 定義の組み合わせによって行われます。
LogFormat と CustomLog で設定します。
host ident authuser date request status bytesもし項目に入れる値がないときは、ハイフン(-)で表現されます。 それら項目の意味と値は以下の通りです:
date = [day/month/year:hour:minute:second zone]
day = 2 桁
month = 3 文字
year = 4 桁
hour = 2 桁
minute = 2 桁
second = 2 桁
zone = (`+' | `-') 4 桁")によって囲まれたクライアントからのリクエスト内容。
LogFormat と CustomLog の書式は文字列です。
この文字列は、それぞれのリクエストをログファイルに格納します。
指定した文字をログファイルに含めることが出来、また `%' 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 が一致するアルゴリズムを作らなければなりません。
TransferLog と CustomLog directive は要求されたログを複数のファイルに出力できます。
それぞれのリクエストはこれらの directive で定義できます。
CookieLog命令はクッキーのログファイル名を指定します。ファイル名は ServerRoot の相対パスです。 この命令はmod_cookiesとの互換性のためだけに付加されており、価値は下がってきています。
最初の項目はログを行うファイル名です。 これはちょうど TransferLog と同じです; フルパスか、対象のサーバのルートからの相対パスで指定します。
フォーマットの引数はログファイルのそれぞれの行のフォーマットを指定します。フォーマットのオプションの利用は、LogFormat directive の引数とちょうど同じです。もしフォーマットになんらかのスペースがあれば(ほとんど全ての場合)、ダブルクウォートで囲まれます。
実際のフォーマット文字列の代わりに、LogFormat directive で定義されるフォーマットのニックネームを使うことができます。
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 "%h %l %u %t \"%r\"
%s %b"これは TransferLog directive によって名前が付けられたデフォルト・ログファイルのフォーマットを設定します。 フォーマットの引数の詳細に関しては、Custom Log Formats セクションを見てください。
directive 行にあるフォーマットにニックネームがあると、完全なフォーマットの文字列を繰り返すよりも、LogFormat と CustomLog directive の順番で使うことができます。
ニックネームを定義する LogFormat directive は以下に他なりません -- つまり、ニックネームを定義するだけで、実際にはフォーマットを適用せず、デフォルトにします。
TransferLog directive は他のデフォルト・フォーマットが指定されていなければ、最新の LogFormat directive か、Common Log Format によって定義されるフォーマットでログファイルを追加します。File-pipe は以下の一つです