Apacheのログは大きく アクセスログ(誰が何を要求したか)と エラーログ(処理中の問題)の2系統に分かれる。
ディレクティブ一覧
| 書式 | 説明 |
|---|---|
| HostnameLookups on|off | クライアントのIPアドレスをログファイルに記載する際、IPアドレスを逆引きしホスト名で記録するかどうか指定 |
| LogFormat 書式 書式名 | アクセスログに使われる書式を定義 |
| CustomLog ファイル名 書式名 | アクセスログのファイル名と、LogFormatで定義された書式を指定 |
| ErrorLog ファイル名 | エラーログファイルを指定 |
| LogLevel ログレベル | エラーログに記録するログのレベルを指定 |
アクセスログ系:LogFormat と CustomLog
2つはセットで使う。
- LogFormat で「書式」に**書式名(ニックネーム)**を付けて定義する。
- 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 に
RefererとUser-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コマンドでまとめて変換するのが定石。