Saturday, January 12, 2008

Try Zend Framework vol.10 "Mailing an error log"

Zend Framework has great logging system like "Zend_Log_Writer_Stream", "Zend_Log_Writer_Db".
But if some trouble happens, you might want to know it ASAP or don't want to know it forever, don't you :P

Let's make a log writer for mail first.

library/Hoge/Log/Writer/Mail.php
<?php
/** Zend_Log_Writer_Abstract */
require_once 'Zend/Log/Writer/Abstract.php';

/** Zend_Log_Formatter_Simple */
require_once 'Zend/Log/Formatter/Simple.php';

class Hoge_Log_Writer_Mail extends Zend_Log_Writer_Abstract
{
/**
* Mailer
* @var Zend_Mail
*/
private $_mail;

/**
* Class constructor
*
* @param Zend_Mail $mail Mail instance
*/
public function __construct($mail)
{
$this->_mail = $mail;
$this->_formatter = new Zend_Log_Formatter_Simple();
}

/**
* Write a message to the log.
*
* @param array $event event data
* @return void
*/
protected function _write($event)
{
$line = $this->_formatter->format($event);
$this->_mail->setBodyText($line);
$this->_mail->send();
}

}


Settings for Mail Logger.
www/index.php
<?php
require_once 'Zend/Registry.php';
require_once 'Zend/Mail.php';
require_once 'Zend/Log.php';
require_once 'Hoge/Log/Writer/Mail.php';

// Create mail object.
$mail = new Zend_Mail();
$mail->addTo('foo@example.com', 'System members');
$mail->setSubject('Error Occured!');
$mail->setFrom('foo@example.com');

// Set writer
$writer = new Hoge_Log_Writer_Mail($mail);

// Set logger and writer
$logger = new Zend_Log();
$logger->addWriter($writer);

// Set in registry
Zend_Registry::set('logger', $logger);


To use it. Get logger from registry.
application/controllers/HogeController.php
<?php
class HogeController extends Zend_Controller_Action
{
function loggerAction()
{
$logger = Zend_Registry::get('logger');
$logger->log('Information log', Zend_Log::INFO);
$logger->emerg('Emerg log');
exit;
}
}


Ok, that's it. From now, you cannot escape from error mail!
If you don't want to get error mail just create system without bugs!! :)
(weight 88.7kg BMI 30%)

Labels:

0 Comments:

Post a Comment

<< Home