×

Sign in with twitter.

You can follow the user and hashtags.

Share your tips on social media.

Post relative tips.

If you have relative tips, click [Add relative tips] to post.

[CakePHP2] ログの書き出し方法が色々で紛らわしいので整理したい

@kanonji@kanonji 5028 viewer 82 embed viewer embed
## CakeLog::write() info() error() notice()など含む

クラス名から、ログ関連の基本となるクラスと思われる。
`CakeLog::config('my_log', array('engine' => 'FileLog'));` の様に、ログ出力のエンジンを切り替える事が出来る。
デフォルトで読み込まれて無く、使う場合は `App::uses('CakeLog', 'Log');` する必要がある。

## Debugger::log()

```
Provide custom logging and error handling.
Debugger overrides PHP's default error handling to provide stack traces and enhanced logging
```

CakePHP APIによると、PHPのエラーハンドリングをオーバーライドしているらしい。Error的な名前じゃなくDebuggerなのは、Stack Trace等を扱いやすくしているのが、デバッグ目的だからかもしれない。
Debugger::dump()でブラウザに出力しDebugger::log()でログファイルに出力する。Debugger::log()は内部でCakeLog::write()を呼んでいる。非常に使いにくい事に、dump()もlog()も配列・オブジェクトが3階層までしか展開されず4階層以降は省略される。

## Object->log()

Cake.CoreパッケージのObjectクラス。いわゆる基底クラス。
CakePHPに含まれる全てのクラスが継承している訳じゃないみたいだけど、ControllerとModelは少なくとも継承している。

Object->log()もCakeLog::write()を呼んでいる。配列・オブジェクトの展開に `print_r($msg, true)` を使っているので、Debugger::log() より使いやすい。とりあえずログに出したい時に、変に省略されないので便利。ただ、でかいオブジェクトを出力すると、どんどんログファイルが肥大化するし、見づらいログファイルになってしまう。

## メモ

* CakePHPのデバッグモードかどうかで、ログが出たり出なかったりする的な話も有った気がするけど、追えてない。
* しっかりとログ設計をして開発する場合、どれを使うのが良いとかは正直よくわからない。
* Debuggerクラスが地味に使いにくい。

#cakephp2.0
Add relative tips

Users who share this tip.

Comments