記事作成の経緯
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!
類似記事
- CodeIgniterのログを独自カテゴリーに分けて出力する
https://qiita.com/Go-Noji/items/dbf248f2fd55ed48ca58