2013年3月4日、ブログは以下のURLに移行しました。最新の記事はこちらで公開しています。
新しいブログでは、コメントやリンクが一部切れていたり、一部機能が調整中です。
新しいブログへ

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

投稿日:2012.01.27 / カテゴリ:WEB、WEBシステム関連 / 投稿者: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みたいな指定ができない・・・ってことだろうか。

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

コメント

2012.04.03 02:13:07 Tom Goodsun

訂正です!
これイケてないわけではないんです!
Analogを使用するときに%{%a %b %d %T %Y}tは認識できないそうで、その場合はデフォルトのフォーマットがいいみたいです。
今じゃアクセス解析の手段はいろいろあるので、Analog使わない方はカスタマイズするほうがいいんじゃないかな。
このアイテムは閲覧専用です。コメントの投稿、投票はできません。