CodeIgniterに独自のログレベルを追加する方法


記事作成の経緯

Codeigniterには log_message() というログファイルにメッセージを記述する方法がある。

Error Handling
https://codeigniter.com/user_guide/general/errors.html?highlight=log_message#log_message

だが、この仕様が以下の問題を抱えている。

  • $config['log_threshold'] の値により出力されないログがある
    (1に設定した場合はERRORしか出力されない)
  • INFO, DEBUGにはCodeIgniter自身のログも出力されて読みづらいので、$config['log_threshold'] = 1 としたい。
  • 用意されているものが3つ(ERROR, DEBUG, INFO)しかなく、出したいログに相応しい名前を選べない
    ※例えばメールの送信結果だったら「EMAIL」とか、管理画面のログなら「MANAGE」とかにしたい。

そこで、簡単にカスタムログを出力する方法まとめた。

1. Logクラスの拡張

application/core に MY_Log.php を追加する
※「MY_」部分は config.php の $config['subclass_prefix'] に従う。

2. My_Log.php にカスタムログを記述

Logクラスを継承して1行追加するだけ。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Log extends CI_Log {
    protected $_levels = array('ERROR' => 1, 'DEBUG' => 2, 'INFO' => 3, 'ALL' => 4, 'EMAIL' => 1, 'MANAGE' => 1);
}
  • ERROR, DEBUG, INFO, ALL までは system/core/Log.php のもの(必須)。
  • その配列の後ろに $key => $level の形で追記していく。
  • $level$config['log_threshold'] = 1 を想定しているのでERRORと同じ1にした。

3. 動作確認

任意のプログラム中にログ出力コマンドを書いてアクセス。

// メール送信プログラム
if($mail_sended) {
  log_message('email', 'sended!');
} else {
  log_message('email', 'failed: 失敗原因とかを記載');
}

ログファイルには以下のように記載される

EMAIL - 2019-11-15 19:40:06 --> sended!

類似記事