CakePHP2.0でlog4phpを利用する
notoです。
CakePHPのloggerはシンプルすぎて扱いずらいので、ボクは毎回log4phpを利用しております。 CakePHP2.0でもlog4phpを利用したかったので試しに組み込んでみたところ、かなりスマートに実装できましたのでご紹介をば。
log4phpのダウンロード
こちらからlog4phpをダウンロードします。 Apache log4php
動作環境
- CakePHP 2.0.4
- PHP 5.3.8
- CentOS 5.6
log streamsを作成・設定
CakePHP2.0では、以下のように利用したいloggerを指定することができるようになりました。 そこで、これを利用してlog4phpを組み込んでいきます。
1 2 3 4 |
|
log4phpの配置
ダウンロードしたlog4phpを配置します。 ドキュメントによると「app/Lib/Log/Engine/」もしくは「app/Plugin/[プラグイン名]/Lib/Log/Engine/」に配置したらいいよ。と記載してあるので素直に従って「app/Lib/Log/Engine/」以下にlog4phpを配置します。
ディレクトリ構造
1 2 3 4 5 |
|
log4phpの指定
もちろん配置しただけでは、利用できないのでlog4phpを使いたいぜ!と設定してあげる必要があります。 記載する箇所は、bootstrap.php内になります。
1 2 3 4 |
|
この設定をすることで、app/Lib/Log/Engine/以下のCustomLogger.phpを探しにいきます。 CustomLogger.phpをまだ作成していないので、次はCustomLogger.phpを作成します。
CustomLoggerの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
|
ディレクトリ構造
1 2 3 4 5 6 7 |
|
CakeLogInterfaceは必ず継承してください。でないと$this->log();と書けないですからね。 特に説明するようなことはないのですが、コンストラクタでlog4phpのインスタンスを取得し、writeメソッド内でlog4phpを利用しているだけです。
log4phpでは、「notice」というログレベルがないので代わりに「info」で出力させています。
コンストラクタに入るoptionは
1 2 3 4 5 6 |
|
log4php.propertiesの配置と設定
最後に、log4phpは設定ファイルがないと動作してくれません。その設定ファイルがlog4php.propertiesになります。 今回は、「app/Config/」以下にlog4php.propertiesを配置しています。
ディレクトリ構造
1 2 3 |
|
log4php.propertiesの設定
「log4php.properties 設定」とgoogle先生に伺えば色々出てくると思いますが、サンプルとして設定例を記載しておきます。
1 2 3 4 5 6 7 |
|
これで$this->log(‘error’)とすれば、内部ではlog4phpが動作することになります。 CakePHP1.3よりスマートに組み込めると思うのですが、どうですかね。