1159613_85120857

 PHPのフレームワークCakePHP 2で何かしら記録をする場合、オリジナルのログを吐き出すことができればいろいろと便利ですよね。

 このCakePHPでオリジナルのログの吐き出し方がわかったので下記に明記しておきます。

 実はコントローラー上でオリジナルのログを吐き出す方法として

$this->log("(ここにログに吐き出すメッセージを書く)", 'hoge-123');

と、第1引数にログへ書き出す内容。第2引数にオリジナルログのファイル名を書けば今まではログを吐き出すことができたのですが、いつからなのか(Ver.2からなのかな?)、これではログを吐き出すことができませんでした。ちなみにCakePHPのバージョンは2.4です。

 ではオリジナルログの吐き出す方法はどうするかというと、Configフォルダ内にあるbootstrap.phpで設定を行います。デフォルト状態で下記の様なソースがあることが確認できるはずです。

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

 このソースをアレンジすることでオリジナルソースを吐き出すことができます。例えば、「hoge3.log」(「3」は説明の都合上で、特に意味はありません)というようなログを「/app/tmp/logs/」へ吐き出したいとします。そうした場合は下記の様なソースをbootstrap.phpに追加します。

CakeLog::config('hoge1', array(
    'engine' => 'File',
    'types' => array('hoge2'),
    'file' => 'hoge3',
    'path' => LOGS.DS.'hoge4'.DS,
));

 それぞれの説明を書くと、「hoge1」はキー名で他と干渉が無い英数字であれば何でもよさそうです。

 「engine」の「File」はログをファイルへ出力するという意味らしく、これ以外にもあるようですがちょっと調べきれませんでした。

 「types」の「hoge2」はコントローラーから呼び出す時の名前で、複数設定することができます。また、この部分はログに書かれた時に

2013-12-11 13:38:42 Hoge2: (ログ内容)

といった様に日付のあとに先頭が大文字になって書き込まれます。その為、この「types」の値を複数用意しておけば、1つのファイル内でいろいろとログの分類を行うことができます。

 「file」はログファイルの名前となります。ちょっと応用して

'file' => date('Ymd').'_hoge3',

とすればファイル名の先頭に日付が追加されて「20131211_hoge3.log」と出力されます。

 さて、最後にデフォルトにはない「path」というのがあります。これはログを吐き出すパスを設定するキーになります。「LOGS」はCakePHPで用意されているログディレクトリののフルパスで「DS」がディレクトリの区切り文字「/」になります。「hoge4」はオリジナルディレクトリなので、このディレクトリにログファイルをまとめることができます。

 さて、実際にコントローラー側でこのログを呼び出す方法は

$this->log('(ログに書き出したい内容)', 'hoge2');

とし、第1引数にログに書き出したい内容を明記し、第2引数にbootstrap.phpへ追加したCakeLog内ののキー「types」の値を明記すればログとして吐き出されます。

 これらの内容は自分で調べたところもあるため間違いがあるかもしれません。その時は当記事のコメントや問い合わせで教えて頂けると幸いです。

Webアプリ開発を加速する CakePHP2定番レシピ119

著者/訳者:長谷川 智希

出版社:秀和システム( 2013-09-28 )

定価:

単行本 ( 318 ページ )

ISBN-10 : 4798039519

ISBN-13 : 9784798039510