ログ出力時と同時にメールで通知する方法

保守とかしているとログは非常に重要。
ログインできないとか、エラーが出たんだけどとかユーザーからの問い合わせで調査する事が良くある。


それとは別にクリティカルなエラーとかが出た場合はログを出力しつつ、通知メールを送信したい場合がある。
そういう場合は、 Zend_Log_Writer_Mock を使用すると便利。

30.2.5. モックによるテスト
Zend_Log_Writer_Mock は非常にシンプルなライターです。 受け取った生のデータを配列に格納し、それを public プロパティとして公開します。

http://framework.zend.com/manual/ja/zend.log.writers.html#zend.log.writers.mock
<?php
$writer = new Zend_Log_Writer_Stream('/path/to/log');
$logger = new Zend_Log($writer);
$mock = new Zend_Log_Writer_Mock();
$logger->addWriter($mock);

$logger->log('hogefuga');

// 最後に記録されたログを取り出す。
$message = end($mock->events);

// メール送信処理

最後に記録されたログを取り出して、あとはメールを送信するだけ。
もちろん上のような例だと再利用が難しいので、 Zend_Log を継承した独自のクラスとかを使ってそこに書いている。