ログを出力したしたい場合に使用する関数。
使用方法
Object クラスのメソッドとして、log() が用意されているため、コントローラ、モデル、ビュー、ヘルパーなど Object クラスを継承しているクラスで下記のように使用することができる。
$this->log($msg, $type = LOG_ERROR)
第1引数
$msg:ログファイルに出力したいメッセージ。配列の場合は、print_r() の出力形式と同じように出力される。
第2引数
$type:ログのタイプ(ログ出力レベル)。下記の通り定義されている。
$levels = array( LOG_WARNING => 'warning', // 3 LOG_NOTICE => 'notice', // 4 LOG_INFO => 'info', // 6 LOG_DEBUG => 'debug', // 5 LOG_ERR => 'error', // 2 LOG_ERROR => 'error' // 2 );
ログの出力先
出力先は /app/tmp/logs/ の配下。第2引数のログ出力レベルによって、debug.log または error.log に出力される。
- ログ出力レベルが 2 または 3 の場合は error.log に出力
- ログ出力レベルが 4 から 6 の場合は debug.log に出力
特殊な使用方法
ログファイルの出力を debug.log または error.log 以外の名前にしたい場合。
ある特定の処理のログだけをまとめて起きたい場合は、debug.log や error.log に出力してしまうと、該当のログが他のログに埋もれてしまう。これを避けるために、独立したログファイルを持ちたい場合が時の対処方法。
第2引数の $type を出力したいログファイル名にする。
sample.log というログファイルを出力したい場合は下記の処理を入れる。
$this->log($msg, 'sample')
解説
log() メソッドは下記の通りに処理が行われている
Object::log($msg, $type = LOG_ERROR) CakeLog::write($type, $msg);
ここで、/cake/libs/cake_log.php の CakeLog::write() の処理でログファイルを指定する処理にて、ログのタイプに該当しない場合のファイル名を、$type.log としている。
if ($type == 'error' || $type == 'warning') { $filename = LOGS . 'error.log'; } elseif (in_array($type, $levels)) { $filename = LOGS . 'debug.log'; } else { $filename = LOGS . $type . '.log'; }
参照
log 関数を使う :: ログの記録(Logging) :: CakePHPによる作業の定石 :: マニュアル :: 1.2 Collection :: The Cookbook