2007年11月9日金曜日

[Zend_Logで行く1]

Zend frameworkの研究をしようと思い、ちょろちょろと触ってみました。
プライオリティで考えるとMVCモデル部分、DB、Log、Exceptionが優先度高いかなーと。
どっからおさえようかと思いMVCのとこを触ったんだけど、まだ掴めきれてない。
というかZendデフォルト機能を周到しつつSmartyを入れようとしたらあんましキレイ
にならない。。。サンプルをスコーンと入れても、実際に開発するとデフォルトView
を殺しつつ、自分でrender()とか書かないといけない。しかもデフォルトのViewを殺して
しまうのでhelper、filterが死んでしまう。勿体無い。なのでちょっとおあずけ。

はじめはLogからいきましょう。DBと違って環境も要らんしねw

Zend_Logを見てみましたが、ドフォルトでも良い感じ。
ちょっと拡張すれば、十分に運用できるんじゃまいか!?
DBに突っ込む事もしてくれるけど、最初はシンプルにファイル書き出し。

基本的には以下を組み合わせてって事かな。
Zend_Log.......................ログクラス
Zend_Log_Writer_Abstract.......実際にファイル書き込みや、書き込みログ生成
Zend_Log_Formatter_Interface...ログの形式を定義。Writerに追加。
Zend_Log_Filter_Interface................保存するログのフィルター。Writer、Logに設定可能

Logでまずやりたいのが
1.デバッグ、運用、エラーとログレベルでファイルを分ける。
2.[1]で分けたファイルそれぞれのログ形式を変える。

追加してやりたいのが、
3.logメソッドをラップしてログレベル毎にメソッド用意(DEBUGならdebug()な感じ)
4.メッセージIDをLogに渡して、事前に作成したメッセージデータからメッセージ取得

[3]は好みw 難しくないけどね~。
[4]はソースコードにメッセージベタ書きになるのが嫌なはず。

まずは[1]からログの形式Formatterを作成、Filterで
Writerのインスタンスを3つ生成。WriterはZend_log_Writer_Streamを使用。
$debugWriter = new Zend_log_Writer_Stream('./debug.log');
$infoWriter = new Zend_log_Writer_Stream('./info.log');
$errorWriter = new Zend_log_Writer_Stream('./error.log');

ログレベルで振り分けるFilterを作り、Writerに追加
振り分けはdebug.logはDEBUG、info.logはINFO~WARN、error.logはERR~と考えると
$debugFilter = new Zend_Log_Filter_Priority(Zend_Log::DEBUG ,"==");
$debugWriter->addFilter($debugFilter);

$infoStartFilter = new Zend_Log_Filter_Priority(Zend_Log::INFO);
$infoEndFilter = new Zend_Log_Filter_Priority(Zend_Log::WARN ,">=");
$infoWriter->addFilter($infoStartFilter);
$infoWriter->addFilter($infoEndFilter);

$errorFilter = new Zend_Log_Filter_Priority(Zend_Log::ERR);
$errorWriter->addFilter($errorFilter);
INFO~WARNの範囲制限を心配したけど、
writerとFilterが受け入れるように出来てたのでOKw

writerが出来上がったので、Logに追加。
Logに追加
$logger = new Zend_Log();
$logger->addWriter($debugWriter);
$logger->addWriter($infoWriter);
$logger->addWriter($errorWriter);
はい、いっちょあがり♪

実行すると、それぞれのログファイルにかかれます。

//debug.logへ
$logger->log('debug message',Zend_Log::DEBUG);

//info.logへ
$logger->log('Informational message',Zend_Log::INFO);
$logger->log('notice message',Zend_Log::NOTICE);
$logger->log('warning message',Zend_Log::WARN);

//error.logへ
$logger->log('error message',Zend_Log::ERR);
$logger->log('emergency message',Zend_Log::EMERG);
今日はこんぐらいにしとこうかな。

0 件のコメント :

コメントを投稿