-new logging class
-don't log errors to stdout -log all errors to /var/log/airtime/zendphp.log
This commit is contained in:
parent
bb5deda09d
commit
5204da4502
|
@ -0,0 +1,109 @@
|
|||
<?php
|
||||
|
||||
class Airtime_Zend_Log extends Zend_Log
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $_registeredErrorHandler = false;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var array|boolean
|
||||
*/
|
||||
protected $_errorHandlerMap = false;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var callback
|
||||
*/
|
||||
protected $_origErrorHandler = null;
|
||||
|
||||
|
||||
public function __construct(Zend_Log_Writer_Abstract $writer = null)
|
||||
{
|
||||
parent::__construct($writer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Error Handler will convert error into log message, and then call the original error handler
|
||||
*
|
||||
* @link http://www.php.net/manual/en/function.set-error-handler.php Custom error handler
|
||||
* @param int $errno
|
||||
* @param string $errstr
|
||||
* @param string $errfile
|
||||
* @param int $errline
|
||||
* @param array $errcontext
|
||||
* @return boolean
|
||||
*/
|
||||
public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
|
||||
{
|
||||
$errorLevel = error_reporting();
|
||||
|
||||
if ($errorLevel && $errno) {
|
||||
if (isset($this->_errorHandlerMap[$errno])) {
|
||||
$priority = $this->_errorHandlerMap[$errno];
|
||||
} else {
|
||||
$priority = Zend_Log::INFO;
|
||||
}
|
||||
$this->log($errstr, $priority, array('errno'=>$errno, 'file'=>$errfile, 'line'=>$errline, 'context'=>$errcontext));
|
||||
}
|
||||
|
||||
if ($this->_origErrorHandler !== null) {
|
||||
return call_user_func($this->_origErrorHandler, $errno, $errstr, $errfile, $errline, $errcontext);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register Logging system as an error handler to log php errors
|
||||
* Note: it still calls the original error handler if set_error_handler is able to return it.
|
||||
*
|
||||
* Errors will be mapped as:
|
||||
* E_NOTICE, E_USER_NOTICE => NOTICE
|
||||
* E_WARNING, E_CORE_WARNING, E_USER_WARNING => WARN
|
||||
* E_ERROR, E_USER_ERROR, E_CORE_ERROR, E_RECOVERABLE_ERROR => ERR
|
||||
* E_DEPRECATED, E_STRICT, E_USER_DEPRECATED => DEBUG
|
||||
* (unknown/other) => INFO
|
||||
*
|
||||
* @link http://www.php.net/manual/en/function.set-error-handler.php Custom error handler
|
||||
*
|
||||
* @return Zend_Log
|
||||
*/
|
||||
public function registerErrorHandler()
|
||||
{
|
||||
// Only register once. Avoids loop issues if it gets registered twice.
|
||||
if ($this->_registeredErrorHandler) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
$this->_origErrorHandler = set_error_handler(array($this, 'errorHandler'));
|
||||
|
||||
// Contruct a default map of phpErrors to Zend_Log priorities.
|
||||
// Some of the errors are uncatchable, but are included for completeness
|
||||
$this->_errorHandlerMap = array(
|
||||
E_NOTICE => Zend_Log::NOTICE,
|
||||
E_USER_NOTICE => Zend_Log::NOTICE,
|
||||
E_WARNING => Zend_Log::WARN,
|
||||
E_CORE_WARNING => Zend_Log::WARN,
|
||||
E_USER_WARNING => Zend_Log::WARN,
|
||||
E_ERROR => Zend_Log::ERR,
|
||||
E_USER_ERROR => Zend_Log::ERR,
|
||||
E_CORE_ERROR => Zend_Log::ERR,
|
||||
E_RECOVERABLE_ERROR => Zend_Log::ERR,
|
||||
E_STRICT => Zend_Log::DEBUG,
|
||||
);
|
||||
// PHP 5.3.0+
|
||||
if (defined('E_DEPRECATED')) {
|
||||
$this->_errorHandlerMap['E_DEPRECATED'] = Zend_Log::DEBUG;
|
||||
}
|
||||
if (defined('E_USER_DEPRECATED')) {
|
||||
$this->_errorHandlerMap['E_USER_DEPRECATED'] = Zend_Log::DEBUG;
|
||||
}
|
||||
|
||||
$this->_registeredErrorHandler = true;
|
||||
return $this;
|
||||
}
|
||||
}
|
|
@ -6,9 +6,18 @@ class Logging {
|
|||
private static $_path;
|
||||
|
||||
public static function getLogger(){
|
||||
if (!isset(self::$logger)) {
|
||||
if (!isset(self::$_logger)) {
|
||||
$writer = new Zend_Log_Writer_Stream(self::$_path);
|
||||
self::$_logger = new Zend_Log($writer);
|
||||
|
||||
if (Zend_Version::compareVersion("1.11") > 0){
|
||||
//Running Zend version 1.10 or lower. Need to instantiate our
|
||||
//own Zend Log class with backported code from 1.11.
|
||||
require_once __DIR__."/AirtimeLog.php";
|
||||
self::$_logger = new Airtime_Zend_Log($writer);
|
||||
} else {
|
||||
self::$_logger = new Zend_Log($writer);
|
||||
}
|
||||
self::$_logger->registerErrorHandler();
|
||||
}
|
||||
return self::$_logger;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
|
||||
//error_reporting(E_ALL|E_STRICT);
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 'on');
|
||||
//error_reporting(E_ALL);
|
||||
//ini_set('display_errors', 'on');
|
||||
|
||||
// Define path to application directory
|
||||
defined('APPLICATION_PATH')
|
||||
|
|
Loading…
Reference in New Issue