Apacheのログは大きく アクセスログ(誰が何を要求したか)と エラーログ(処理中の問題)の2系統に分かれる。

ディレクティブ一覧

書式説明
HostnameLookups on|offクライアントのIPアドレスをログファイルに記載する際、IPアドレスを逆引きしホスト名で記録するかどうか指定
LogFormat 書式 書式名アクセスログに使われる書式を定義
CustomLog ファイル名 書式名アクセスログのファイル名と、LogFormatで定義された書式を指定
ErrorLog ファイル名エラーログファイルを指定
LogLevel ログレベルエラーログに記録するログのレベルを指定

アクセスログ系:LogFormat と CustomLog

2つはセットで使う。

  1. LogFormat で「書式」に**書式名(ニックネーム)**を付けて定義する。
  2. CustomLog で「どのファイルに、どの書式名で」出力するかを指定する。
# 書式を "combined" という名前で定義
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

# その書式名を使ってアクセスログを出力
CustomLog logs/access_log combined

よく使う書式指定子(%)

指定子内容
%hクライアントのホスト(IPアドレス)
%lリモートログ名(identd、通常は -
%u認証ユーザ名
%tリクエストを受け付けた時刻
%rリクエストの最初の行(メソッド・URI・プロトコル)
%>s最終的なステータスコード
%b送信バイト数(ヘッダ除く、0は -
%{Referer}iリクエストヘッダの Referer
%{User-Agent}iリクエストヘッダの User-Agent

代表的な定義済み書式

  • common(共通ログ形式): %h %l %u %t "%r" %>s %b
  • combined(結合ログ形式): common に RefererUser-Agent を追加したもの。

エラーログ系:ErrorLog と LogLevel

  • ErrorLog … エラーログの出力先ファイルを指定。
  • LogLevel … どの深刻度まで記録するかを指定。指定したレベル以上(より深刻な側)が記録される。デフォルトは warn

ログレベル(重要な順 = 深刻な順)

emerg → alert → crit → error → warn → notice → info → debug → trace[1-8]

レベル意味
emerg緊急。システムが使用不能
alert即時対応が必要
crit致命的な状態
errorエラー
warn警告(デフォルト)
notice重要だが正常な情報
info情報
debugデバッグ用
trace1〜trace8トレース(最も詳細)

例:LogLevel warn なら warn 以上(warn / error / crit / alert / emerg)が記録され、notice 以下は記録されない。左に行くほど深刻、右に行くほど詳細。

ErrorLog と ErrorDocument は別物

名前がどちらも Error で始まるので混同しやすいが、役割はまったく違う。

ディレクティブ役割
ErrorLogエラーをどこに記録するか(サーバ側のログファイルのパス)ErrorLog /var/log/httpd/error_log
ErrorDocumentエラー時にクライアントへ何を返すか(エラーページ)ErrorDocument 404 /error404.html

ErrorDocument <ステータスコード> <表示先> の順で書く。表示先がローカルファイルなら先頭スラッシュ必須http://… のURL指定も可。ErrorLog = Log(記録先)、ErrorDocument = Document(表示文書)、と末尾の語で切り分ける。

HostnameLookups

  • on にすると、クライアントIPを 逆引き(DNS) してホスト名でログに記録する。
  • ただしリクエストごとにDNS問い合わせが発生し性能が低下するため、デフォルトは off(IPのまま記録)。
  • ホスト名が必要な場合は、後から logresolve コマンドでまとめて変換するのが定石。