裏紙に書く程度の内容

Codeigniter のログをフォーマットする

CodeIgniterのログをフォーマットする方法について。

デフォルトのフォーマット

デフォルトのフォーマットは以下のような出力になるかと思います。

INFO - 2016-09-13 16:03:29 ---> Config Class Initialized
INFO - 2016-09-13 16:03:29 ---> Hooks Class Initialized
DEBUG - 2016-09-13 16:03:29 ---> UTF-8 Support Enabled

[レベル] - [日時] –> [メッセージ]

大した問題じゃないんですが、”INFO”,”DEBUG”の文字数が違うため、ログを見るとちょっとガタガタ。
今回はこれを直してみます。

ソースを確認

まず、1行のログを出力している部分を確認しておきます。

system/core/Log.php

protected function _format_line($level, $date, $message)
{
    return $level.' - '.$date.' --> '.$message."\n";
}

これを変えればよさそう。

MY_Log を作成

上記ファイルはいじっちゃダメなので

application/core/MY_Log.php

でオーバーライドします。

内容はとりあえず以下のような感じ。

<?php

class MY_Log extends CI_Log
{
    protected function _format_line($level, $date, $message)
    {
        return sprintf("%-5s - %s --> %s\n", $level, $date, $message);
    }

}

今回はこれだけでOK。

確認してみると

INFO  - 2016-09-13 16:14:36 --> Config Class Initialized
INFO  - 2016-09-13 16:14:36 --> Hooks Class Initialized
DEBUG - 2016-09-13 16:14:36 --> UTF-8 Support Enabled

と出力されました。ログのがたつきが解消されましたね。


今回の修正はあまり意味がありませんが、ログ出力部のカスタマイズ方法分かれば、あとはどうにでもできそうですね。

sessionIDでも出力してみる

(2017/12/21 追記)

セッションIDを追加する場合は以下のようなイメージになります。

return sprintf("%-5s - %s [%s] --> %s\n", $level, $date, session_id(), $message);
URABLO
広告
Index
広告