とある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]
今度は成功
結論
アクセスログをカスタマイズしたい時は、combined
やcommon
以外のnicknameをつけること