9.20. ログのカスタマイズ(mod_log_config)

mod_log_config モジュールを使用すると Apache が出力するアクセスログを任意のフォーマットにカスタマイズすることができます。/etc/httpd/conf/modules には以下の記述があり、mod_log_config はデフォルトで読み込まれています。

LoadModule log_config_module    /usr/lib/httpd/modules/mod_log_config.so

mod_log_config の関連ディレクティブは以下の通りです。

HostnameLookups On|Off|Double

ログファイルに、クライアントのホスト名を記録するか IP アドレスを記録するかを指定します。ホスト名で記録する場合は On、IP アドレスで記録する場合は Off を指定します。通常は初期値のまま Off に設定することを推奨します。On や Double を指定すると名前解決に DNS 参照を行うため、パフォーマンスが低下する可能性があります。Double は、逆引きで得た結果のホスト名を更に DNS に問い合わせ、リクエストの IP アドレスとマッチするかどうかを照合します。

LogFormat format|nickname [nickname]

ログのフォーマットとそのニックネームを対応付けます。このディレクティブは、後述する CustomLog ディレクティブでログのフォーマットをニックネームで指定できるようにするためのものです。主にフォーマットには、%h(ホスト名または IP アドレス)、%l(クライアントのユーザー名)、%u(ユーザー認証のユーザー名)、%t(アクセスされた時刻)、%r(HTTP リクエスト)、%>s(リダイレクト後のサーバーステータスコード)、%b(送信バイト数)、%{<HTTP ヘッダ}i(サーバーに送られたクライアントの HTTP ヘッダ)などの指定が可能です。詳細は Apache のオンラインマニュアルを参照してください。

Turbolinux 10 Server の httpd.conf には初期状態で以下のログフォーマットが指定されています。例えば、ニックネーム common の指定は、CLF(Common Log Format)という一般的なログ解析用のツールで使用できるフォーマットになっています。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog file|pipe format|nickname [env=[!]environment-variable]

ログのフォーマットとそれを出力するファイルを対応付けます。pipe を指定した場合には、| に続くパスにログ出力結果を渡します。LogFormat ディレクティブでニックネームを設定した場合は、ニックネームで指定することができますが、LogFormat ディレクティブで設定していない場合は、直接フォーマットの形式を同様に指定します。また、env=[!]environment-variable を定義することで、SetEnvIf ディレクティブによってセットされた環境変数にマッチする場合(! 指定はマッチしない場合)にログ出力するといった指定も可能です。

以下のように指定されているとき LogFormat で指定された combined というニックネームのログフォーマットで、サーバールート下に logs/access_log が出力されます。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access_log combined

以下のように指定をした場合も同様です。

CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

エラーログを出力するには、以下のディレクティブを使用することができます。

ErrorLog file-path|syslog[:facility]

エラーメッセージをログとして残す出力先を指定します。file-path を指定した場合は指定したファイルに出力します。Turbolinux 10 Server の初期値は logs/error_log で、サーバールート下に logs/error_log ファイルが出力されます。syslog[:facility] を指定すると syslogd にログ出力することができます。ファシリティを省略した場合は、local7 が使用されます。

LogLevel level

ログファイルに出力するエラーのプライオリティを指定します。プライオリティは重要度(緊急度)の高い順に、emerg、alert、crit、error、warn、notice、info、debug の 8 つがあります。初期値は、warn です。

ティップ

Turbolinux 10 Server の /etc/httpd/conf/httpd.conf でアクセスログとエラーログの出力先に指定されている /etc/httpd/logs/ は、/var/log/httpd/ へのシンボリックリンクになっています。

注意

Apache2.0 では、Agent ログと referer ログを出力するための AgentLog ディレクティブ、RefererLog ディレクティブ、RefererIgnore ディレクティブ(提供する mod_log_agent と mod_log_referer モジュール)は削除されていますので、CustomLog ディレクティブで指定します。