记录php错误日志可以有力的帮我们查找问题、修复bug,
php提供了set_error_handler、set_exception_handler来捕获错误和异常。
但是set_error_handler并不能捕获E_ERROR、 E_PARSE、 E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING、E_STRICT等错误。一般来讲,如果是致命错误,会导致php解释器都无法编译通过,自然不能捕获这些错误,但是,我们可以通过一些方法来巧妙的得到这些错误信息。
异常或错误被set_exception_handler set_error_handler try catch 等捕获后,就不会在进入error_log.log日志。

error_reporting(0);
// ob_start();
function errorHandler($e){
echo "<pre>";
echo '这是一个错误';
print_r($e['code']);
print_r($e['file']);
print_r($e['line']);
throw $e;
}
function errorHandler2($e){
echo "<pre>";
echo '这是一个错误2';
print_r($e['code']);
print_r($e['file']);
print_r($e['line']);
throw $e;
}
function exceptionHandler(Exception $e){
echo '这是一个异常';
echo "<pre>";
print_r($e->getTraceAsString());
// throw $e;
}
function close(){
// ob_end_clean();
$error = error_get_last();
echo "<pre>";
print_r($error['code']);
print_r($error['file']);
print_r($error['line']);
}
function close2(){
// ob_end_clean();
$error = error_get_last();
echo "<pre>";
print_r($error['code']);
print_r($error['file']);
print_r($error['line']);
}
//设置捕获错误。 捕获后不再向上抛出。 error_get_last 为空
set_error_handler('errorHandler');
// set_error_handler('errorHandler2');
//设置捕获异常。 捕获后 后边不会再有异常输出。也无法再次获取异常 。 除非 在函数中再次抛出异常 throw $e; 也不会记录到异常日志
set_exception_handler('exceptionHandler');
//设置程序结束时的函数。只是获取信息 不影响错误 记录到日志。 可以设置多个
register_shutdown_function( 'close' );
register_shutdown_function( 'close2' );
//错误
// echo 0/0;
echo $a['dd'];
die;
E_Error 通过set_error_handler 无法捕获。 需要用register_shutdown_function配合 error_get_last获取错误信息。

try{
throw new Exception('xxx');
}catch (Exception $e){
// throw $e;
}
set_error_handler('handlErr');
register_shutdown_function('err');
function err(){
var_dump(error_get_last());
}
function handlErr($msg,$code,$file,$line,$content){
var_dump($msg);
var_dump($code);
var_dump($file);
var_dump($line);
// var_dump(error_get_last());
}
// var_dump($a['xx']);
// echo 4/$a;
// echo 'end';
//var_dump(new qq());
try{
var_dump(new qq());
}catch (Error $e){
// throw $e;
}
echo 'success';
版权声明:本文为come11234原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。