> -----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();
    }
}

Reply via email to