PHP错误处理程序和ErrorException混淆:日志堆栈跟踪


PHP error handler and ErrorException confusion: log stack trace

我想将所有PHP错误记录到数据库中,所有错误都带有堆栈跟踪。但PHP手册的片段让我感到困惑:

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

我目前使用传递给"set_error_handler()"的函数将错误记录到数据库中。但是,如果我使用上面的代码,我应该把写错误和堆栈跟踪到数据库的代码放在哪里

function error_handler($errno, $errstr, $errfile, $errline){
    $err = array(
        'errno' => $errno,
        'errstr' => $errstr,
        'errfile' => $errfile,
        'errline' => $errline
    );
    DB::insertAssoc('table_error', $err);
}

处理异常时,需要使用try {/* code */} catch (Exception $error) {/* handle exception code*/}。试试这个:

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
function error_handler($errno, $errstr, $errfile, $errline){
    $err = array(
            'errno' => $errno,
            'errstr' => $errstr,
            'errfile' => $errfile,
            'errline' => $errline
    );
    DB::insertAssoc('table_error', $err);
}
set_error_handler("exception_error_handler");
try {
    $q/1;
} catch (ErrorException $e) {
    error_handler(
        $e->getSeverity(),
        $e->getMessage(),
        $e->getFile(),
        $e->getLine()
    );
}

你可以在这里阅读更多关于在Php中处理异常的信息:http://www.php.net/manual/en/language.exceptions.php