Apacheのエラーログをカスタマイズして見やすくしよう

LinuxでApacheのエラーログをtailしながら見ていくとき、デフォルト状態ではかなり見にくい。

いくつか改善を加えて、見やすくしていこう。

日本語の文字化け

日本語は「\xe3\x82\xa8\xe3\x83\xa9\xe3\x83\xbc」のようにエスケープされてしまい読めなくなる。

セキュリティ上の理由から、マルチバイト文字がURIエスケープされてしまうのだ。

このようなエイリアスを、~/.bashrcに設定し、

alias unesc='while read -r a; do /usr/bin/printf "$a\n" ; done'

このように使うことで、エスケープされている文字列がアンエスケープされて読めるようになる。

tail -f {エラーログ} | unesc

配列のフォーマット

この設定は同時に、配列などの出力をフォーマットして読みやすくする効果もある。

たとえば。このような出力が

[時間] [:error] [pid xxxx] [client xxx.xxx.xxx.xxx.:xxxxx] : Array\n(\n    [id] => 3\n    [num] => 1\n    [order] => 0\n    [limit] => 6\n    [datetime] => 2018-03-29 13:14:31\n)\n

このようにフォーマットされて見やすくなるのだ。

[時間] [:error] [pid xxxx] [client xxx.xxx.xxx.xxx.:xxxxx] : Array
(
    [id] => 3
    [num] => 1
    [order] => 0
    [limit] => 6
    [datetime] => 2018-03-29 13:14:31
)

カラーリング

エラーログには色がついていた方が、圧倒的に読みやすくなる。

cczeを使おう。

このコマンドでインストールし、

sudo yum install ccze --enablerepo=epel

このように使う。

tail -f {エラーログ} | unesc | ccze -A

~/.bashrcに関数を作り、

tail2 () {
    tail $@ | unesc | ccze -A
}

tailの代わりに使うと便利だろう。

tail2 -f {エラーログ}

Apache Module mod_log_config

For security reasons, starting with 2.0.46, non-printable and other special characters are escaped mostly by using \xhh sequences, where hh stands for the hexadecimal representation of the raw byte. Exceptions from this rule are ” and \ which are escaped by prepending a backslash, and all whitespace characters which are written in their C-style notation (\n, \t etc).