ThinkPHP错误⽇志记录
最近在使⽤Think PHP3.2, 发现设置APP_DEBUG=false,⽇志信息记录不全,类不到,或者⽅法不存在等致命错误信息都没有记录。百度了⼀下, 发现其他⼈也有这样的问题, 时间还是2014年的。全盘搜索register_shutdown_function,错误处理函数register_shutdown_function('Think\Think::fatalError');源码如下:
// 致命错误捕获
static public function fatalError() {
Log::save();
if ($e = error_get_last()) {
switch($e['type']){
case E_ERROR:
case E_PARSE:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
ob_end_clean();
self::halt($e);
break;
}
}
}
/**
* 错误输出
* @param mixed $error 错误
* @return void
*/
static public function halt($error) {
$e = array();
if (APP_DEBUG || IS_CLI) {
//调试模式下输出错误信息
if (!is_array($error)) {
$trace = debug_backtrace();
$e['message'] = $error;
$e['file'] = $trace[0]['file'];
$e['line'] = $trace[0]['line'];
ob_start();
debug_print_backtrace();
$e['trace'] = ob_get_clean();
} else {
$e = $error;
}
if(IS_CLI){
exit(iconv('UTF-8','gbk',$e['message']).PHP_EOL.'FILE: '.$e['file'].'('.$e['line'].')'.PHP_EOL.$e['trace']);
}
} else {
/
/否则定向到错误页⾯
$error_page = C('ERROR_PAGE');
if (!empty($error_page)) {
redirect($error_page);
} else {
$message = is_array($error) ? $error['message'] : $error;
$e['message'] = C('SHOW_ERROR_MSG')? $message : C('ERROR_MESSAGE');
}
}
// 包含异常页⾯模板
error parse new$exceptionFile = C('TMPL_EXCEPTION_FILE',null,THINK_PATH.'Tpl/think_exception.tpl');
include $exceptionFile;
exit;
}
在debug=true,或者cli模式下会把错误输出到页⾯, debug=false时, ⼜判断了SHOW_ERROR_MSG的状态, 为true⼜显⽰错误信息到页⾯, 没感觉出其⽤意。最后就是没有写⼊⽇志,不科学啊出了错就只有靠猜了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论