Monday, 28 July 2008

PHP Logging - Zend_Log

Zend_Log provides a very convenient mechanism for keeping track of particular events when they occur in application code.

I tend to use a singleton pattern-based Logger class and then typically call a static logMessage() method directly.

Alternatively, calling the static instance() method returns the Logger, providing additional flexibility (e.g., customise setEventItem() calls on Zend_Log object).

Zend_Registry is being used to hold some values set during initialization of the application.

<?php
 
class Logger
{
private static $instance;
private $logger;

public static function instance()
{
if(!self::$instance)
{
self::$instance = new self();

$formatter = new Zend_Log_Formatter_Xml();

$filter = new Zend_Log_Filter_Priority(Zend_Registry::get('logFilterLevel'));

$writer = new Zend_Log_Writer_Stream(Zend_Registry::get('logFileLocation'));
$writer->setFormatter($formatter);
$writer->addFilter($filter);

self::$instance->logger = new Zend_Log($writer);
}

return self::$instance;
}

public static function logMessage($message=null, $priorityLevel=null, Exception $exception)
{
$logger = self::instance()->logger;

$logger->setEventItem('exceptionCode', $exception->getCode());
$logger->setEventItem('file', $exception->getFile());
$logger->setEventItem('line', $exception->getLine());
$logger->setEventItem('exceptionMessage', $exception->getMessage());
$logger->setEventItem('exceptionTrace', serialize($exception->getTrace()));
$logger->setEventItem('exceptionTraceAsString', $exception->getTraceAsString());

$logger->log($message, $priorityLevel);
}

}
 
?>



No comments: