エンジニア採用セミナー
エンジニア採用セミナー
2013.09.09

CakePHPで任意のログファイルへログを出力する方法

勝利

こんにちは。お盆休みは地元に帰り、あさりが食べたいなぁと思い、冷蔵庫をあさり続けましたが、シジミしかありませんでした。シジミの申し子、勝利です。

 

お後が宜しいようで・・・

 

さぁ、茶番は終わりにして、今回は久しぶりのCakePHPネタです。
CakePHPで任意のログファイルへログを出力する方法をご紹介たいと思います。

どうぞよろしくお願い致します。

 

経緯や用途

理由なんて後からつければいーんです。自分自身が作りたいと決めたら作ればいーんです。

作業している際や、本番リリース後等に自分だけのログ出力ファイルやアプリケーションの仕様的にCakePHPのログ以外のログが必要になったり欲しくなったりしたことはないですか?

 

もちろんログ出力だけであればCakePHPに備わっているものを使用したらいいと思うのですが、CakePHPでデフォルトで吐き出されるログによって汚されたりすると、自分が吐き出したログがどこに行っちゃたのかなーってブチ切れちゃいますよね♪

 

そんな時に今回のTipsが役に立ちます。

そう、そもそも出力するログファイルを変えてしまえばいいのです。

要は、自分専用のログ出力ファイルへ出力するようにするのです。

既存のログファイルも汚さずにできますね。

 

今回僕が行う対象バージョンは、

CakePHP ver 2.3.x

です。

 

CakeLogの設定

ver 2系から??はCakeLogの設定は、

app/Config/bootstrap.php

にて行っていますね。

 

そこでそれらしいのを探していくと・・・

CakeLog::config('debug', array(
'engine' => 'FileLog',
'types' => array('notice', 'info', 'debug'),
'file' => 'debug',
));
CakeLog::config('error', array(
'engine' => 'FileLog',
'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
'file' => 'error',
));

 

ありましたね。CakeLogの設定が。

これがデフォルトの設定で、

  • app/tmp/logs/debug.log
  • app/tmp/logs/error.log

へログを吐き出してくれていると思います。

 

今回はこのデフォルトとは異なるログファイルを出力するようにするのです。

たとえばこんな感じ・・・

app/tmp/logs/log_for_you.log

 

上記に出力するための設定は、

define('LOG_FOR_YOU', 'log_for_you');

CakeLog::config('log_for_you', array(
'engine' => 'FileLog',
'types' => array('log_for_you'),
'file' => 'log_for_you',
));

みたいな設定をしてやってください。

 

自分だけのログを吐き出してみる

吐き出し方は、いつものCakePHPのやつです。

第二引数を自分色に染めてあげましょう。

$this->log('君のためだけのログ', LOG_FOR_YOU);

これを ViewでもControllerでもModelでも好きなところに飾ってあげましょう。

 

さぁ、できたファイルを確認してみよう

ファイルはいつもの場所、

app/tmp/logs

 

作成されるファイルは、君のためだけのログファイル。。。

app/tmp/logs/log_for_you.log

 

そして、書き出されたログは君のためだけのログ。。。

2213-12-24 00:00:01 Log_for_you: 君のためだけのログ

 

 

さぁ、楽しくなってきましたね。

そして、これで終わりとなります。