apacheのアクセスログの形式を変えようとしてつまづいた

とあるPHPのプロジェクトにて、apacheのアクセスログをカスタマイズして吐き出したかったが、つまづいたのでその時の対処法のメモ

失敗例

Apacheのログをカスタマイズ/重いログだけを抽出を参考に設定

設定

hoge.php
...
apache_note('hoge', $hoge);
...
conf.d/hoge.conf
...
LogFormat "%a %m %U %{hoge}n %t" combined
CustomLog logs/hoge_access.log combined
...

アクセスログ

/var/log/httpd/hoge_access.log
192.168.33.1 - - [20/Mar/2018:00:00:00 +0900] "GET /index.html HTTP/1.1" 200 114 "-" 
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"

設定前のアクセスログの出力形式と全く同じ。
つまり、うまくいってない

httpd.confに設定をしてみる

フォーマットがあっているか不安なので、httpd.confに同じLogFormatを設定

設定

conf/httpd.conf
...
LogFormat "%a %m %U %{hoge}n %t" combined
CustomLog logs/hoge_access.log combined
...

### アクセスログ
/var/log/httpd/hoge_access.log
192.168.33.1 GET / foo [20/Mar/2018:00:00:00 +0900]

これなら出力できてる

調べたところ、
apacheアクセスログの書式の設定を理解するによると先程の設定のcombinedの部分はnicknameと呼ばれるもので、つまりLogFormatの定義名かな?
このnicknameがかぶっていたために最初の設定では、ログ出力がうまく変えられていなかったようだ。

成功例

nicknameをcombinedや同じくhttpd.confで定義されているcommon以外のものに変えてみる

設定

conf.d/hoge.conf
...
LogFormat "%a %m %U %{hoge}n %t" hoge
CustomLog logs/hoge_access.log hoge
...

アクセスログ

/var/log/httpd/hoge_access.log
192.168.33.1 GET / foo [20/Mar/2018:00:00:00 +0900]

今度は成功

結論

アクセスログをカスタマイズしたい時は、combinedcommon以外のnicknameをつけること

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.