> -----Original Message-----
> From: Vincent de Lau [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, July 30, 2008 8:49 PM
> To: [email protected]
> Subject: RE: [fw-general] capture STDERR with Zend_Log
>
> I've created a custom error handler for this. See http://
> php.net/set_error_handler and http://php.net/set_exception_handler
And here it is. Sorry for the lack off documentation, but it shouldn't be
that hard.
Usage: Zend_Error_Handler::register();
Vincent de Lau
[EMAIL PROTECTED]
<?php
class Zend_Error_Handler {
/** cannot create a Zend_Error_Handler object, static functions only */
private function __construct() {}
public static function register() {
set_exception_handler(array('Zend_Error_Handler','exceptionHandler'));
set_error_handler(array('Zend_Error_Handler','errorHandler'));
}
public static function errorHandler( $errno, $errstr, $errfile,
$errline, $errcontext ) {
// this is to bypass @ error suppression
if (error_reporting() == 0) return;
switch($errno) {
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
case E_PARSE:
case E_RECOVERABLE_ERROR:
Zend_Registry::get('log')->err("An error occured in
{$errfile} (line: {$errline}): [{$errno}] {$errstr}");
echo "<p>An error occured in {$errfile} (line: {$errline}):
[{$errno}] {$errstr}</p><hr />\n";
echo "<pre>Backtrace:\n";
debug_print_backtrace();
echo "</pre><hr /><pre>Context:\n";
var_dump($errcontext);
echo "</pre>";
die();
break;
case E_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_USER_WARNING:
Zend_Registry::get('log')->warn("An error occured in
{$errfile} (line: {$errline}): [{$errno}] {$errstr}");
if(Zend_Registry::get('debug') && error_reporting() != 0) {
echo "\n<!-- Warning: {$errfile} ({$errline}): {$errstr}
-->";
}
break;
case E_NOTICE:
case E_USER_NOTICE:
case E_STRICT:
default:
Zend_Registry::get('log')->notice("An error occured in
{$errfile} (line: {$errline}): [{$errno}] {$errstr}");
if(Zend_Registry::get('debug') && error_reporting() != 0) {
echo "\n<!-- Notice: {$errfile} ({$errline}): {$errstr}
-->";
}
break;
}
}
public static function exceptionHandler( $exception ){
Zend_Registry::get('log')->err("An error occured in
{$exception->getFile()} (line: {$exception->getCode()}):
[{$exception->getCode()}] {$exception->getMessage()}");
echo "<p>An error occured in {$exception->getFile()} (line:
{$exception->getCode()}): [{$exception->getCode()}]
{$exception->getMessage()}</p><hr />\n";
echo "<pre>Backtrace:\n";
echo $exception->getTraceAsString();
echo "</pre><hr /><pre>Exception:\n";
var_dump($exception);
echo "</pre>";
die();
}
}