LoginSignup
2
3

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-15

記事作成の経緯

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!

類似記事

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3