2007年11月20日火曜日

Zend_Logで行く2

1の続き。
[1]で分けたファイルそれぞれのログ形式を変えようかと思う。
Zend_Logは何もしないと
'%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL
が出力されます。
フォーマットで%XXXXXX%(%で囲まれた箇所)は置換文字列としてWriterが扱うらしく、
timestampの値はデフォルトで出力した時間を置換してくれる。
でも、そのうち日付の形式も選べないといけんね。
priorityName,priority,messageはlog()の引数から取ってきてくれます。

ログの出力する項目を増やせるらしく、書き方としては
Zendのドキュメントにあるような感じ。
pidじゃなくてhost名とちょっと変えてみましたが以下でしょう。
$logger = new Zend_Log();
$logger->setEventItem('host',$_SERVER['HTTP_HOST']);
$logger->log('debug message',Zend_Log::DEBUG);
使うタイミングとしてはlogを実行する直前に使わないと欲しい値が取れなかったり
しますね。例えば実行したファイル名が欲しい場合にZend_Loggerを初期化したところ
でsetEventItemを実行するとどこで実行しても初期化した時のファイル名が入ってしまう。
ファイル名を残したい時ってそんなんじゃないよね。これも考えないと、、、
どこのフレームワークもきっとそうだろうけど、考えること多いな(^^;


長々と書いちゃいましたが、フォーマット変えるなら以下ですんじゃいます。
フォーマットはwriterに持たせられるのが良い感じ。
$debugWriter = new Zend_log_Writer_Stream('./debug.log');
$debugFormat = '%timestamp% %priorityName% (%priority%)'.PHP_EOL;
$debugFormatter = new Zend_Log_Formatter_Simple($debugFormat);

$infoWriter = new Zend_log_Writer_Stream('./info.log');
$infoFormat = '%timestamp% %priorityName% (%priority%): %message%'.PHP_EOL;
$infoFormatter = new Zend_Log_Formatter_Simple($infoFormat);

$errorWriter = new Zend_log_Writer_Stream('./error.log');
$errorFormat = '%timestamp% %host% %priorityName% (%priority%): %message%'.PHP_EOL;
$errorFormatter = new Zend_Log_Formatter_Simple($errorFormat);
あとはlogにwriterを突っ込むだけ。これだけなら簡単ね

0 件のコメント :

コメントを投稿