Apacheのアクセスログ・エラーログのフォーマットがイケてない件
言われてみて納得だった。
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みたいな指定ができない・・・ってことだろうか。
ひとまずこれは、サーバー設定項目で必須のものとなるはずだ。