Apacheのアクセスログ・エラーログのフォーマットがイケてない件

カテゴリ: WEB、WEBシステム関連 / 公開日: 2012年1月27日(金曜)02:02 / 投稿者: Tom Goodsun

言われてみて納得だった。
Apacheのアクセスログとエラーログの日付のフォーマットが違う。
通常は、エラーが発生したら、それに対応するアクセスを見つけようとするだろう。

なので、アクセスログとエラーログを同じファイルに出力しているという人も聞いたことがある。
どっちにしろ、ログ解析をする時に困る。

論より証拠。
私のVMware環境のログ。確かに日付のフォーマットが違う。

==> error_log.0127 <==
[Fri Jan 27 01:02:24 2012] [error] [client 192.168.***.***] File does not exist: /home/www/localhost/public_html/test

==> access_log.0127 <==
192.168.***.*** - - [27/Jan/2012:01:02:24 +0900] "GET /test HTTP/1.1" 404 278 "-" "Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"

これを同じフォーマットになるように設定を変更する。
私はアクセスログにデフォルトで用意されているcombined識別子を使うため、それを直接変更してみた。

#変更前
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

#変更後
LogFormat "%h %l %u [%{%a %b %d %T %Y}t] \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

%{format}tを使う。参考にできるページは以下のとおり。

これで再度確認してみたら、日付のフォーマットが統一できた。

==> error_log.0127 <==
[Fri Jan 27 01:03:27 2012] [error] [client 192.168.***.***] File does not exist: /home/www/localhost/public_html/test

==> access_log.0127 <==
192.168.***.*** - - [Fri Jan 27 01:03:27 2012] "GET /test HTTP/1.1" 404 278 "-" "Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"

 

と、ここで疑問が湧いてきた。

なぜアクセスログとエラーログで日付のフォーマットが違うのか。
その答えを探してみたが見つからなかった。

Apacheのエラーログのページには、エラーログはカスタマイズできないが、アクセスログと照らし合わせることでトレース可能みたいな内容。
深く確認していないのだが、ApacheのエラーログはLogFormatみたいな指定ができない・・・ってことだろうか。

ひとまずこれは、サーバー設定項目で必須のものとなるはずだ。