CodeIgniter 3.xのログ出力をもっと便利にする

この記事は CodeIgniter Advent Calendar 2017 の 12月15日 分の投稿です。
14日の記事は @NEKOGET さんの「CodeIgniter3のチュートリアルをリファクタリング(1)」でした。

CodeIgniter の良い所はやろうと思った事がほぼ素のPHPの知識だけでも実装してしまう事。誰でもさくっと作れてしまうので、小ネタ的な物はあまり見かけないような気がします。有っても数年前にほぼ同じような事を書いたブログ記事がもう有ったり。でも、ブログはいつか消える物。というわけで今回は CodeIgniter のログ出力をちょっと便利にしてみたいと思います。最新のn番煎じです。

  • ログを出力したクラスと関数名を自動で出力する。
  • おもむろに配列を放り込んでもそのまま中身を出力してくれる。
  • 自分自身のコードから出力したログとフレームワーク自体のログを見分けられるようにする。

ファイル名: exlog_helper.php
Gistへのリンク(こちらの方が読みやすいかと)

<?php
if (! function_exist('logDebug')) {

    function logDebug($message)
    {
        $trace = debug_backtrace();
        $output = 'UserLog: ' . $trace[1]["class"] . '::' . $trace[1]['function'] . ' - ';
        if (is_array($message)) {
            $message = print_r($message, true);
        }
        $output .= $message;
        log_message('debug', $output);
    }
}

if (! function_exists('logError')) {

    function logError($message)
    {
        $trace = debug_backtrace();
        $output = 'UserLog: ' . $trace[1]["class"] . '::' . $trace[1]['function'] . ' - ';
        if (is_array($message)) {
            $message = print_r($message, true);
        }
        $output .= $message;
        log_message('error', $output);
    }
}

debug_backtrace()で取得した結果を混ぜ込んでいるだけのログ出力ヘルパーです。渡された変数が配列だった場合はprint_rで文字列にしています。後はファイルの何行目で実行されたかも出しておきたい場合も添え字 ‘line’ に入っています。これをCodeIgniterのautoload対象helperとしておけば、どこでも利用可能になります。CodeIgniterで開発を始める前にこんな感じの機能を用意しておくと何かと便利です。やっている人はもうやっているのでしょうが、私はこんな風に書いているよーと共有までに。

CodeIgniterとは直接関係ないけども:
久しぶりにCodeIgniter以外のフレームワークを触ってみたら1年で死んでしまった話を書きました。→ https://www.sodo-shed.com/archives/12182