123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?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;
- }
- }
|