diff --git a/convention.php b/convention.php index fa1409cb..60bbeeed 100644 --- a/convention.php +++ b/convention.php @@ -105,6 +105,9 @@ return [ // 异常页面的模板文件 'exception_tmpl' => THINK_PATH . 'tpl' . DS . 'think_exception.tpl', + // 异常处理忽略的错误类型,支持PHP所有的错误级别常量,多个级别可以用|运算法 + // 参考:http://php.net/manual/en/errorfunc.constants.php + 'exception_ignore_type' => 0, // 错误显示信息,非调试模式有效 'error_message' => '页面错误!请稍后再试~', // 错误定向页面 diff --git a/library/think/Error.php b/library/think/Error.php index 9370f4d7..331722e4 100644 --- a/library/think/Error.php +++ b/library/think/Error.php @@ -11,7 +11,6 @@ namespace think; -use think\Exception; use think\exception\ErrorException; class Error @@ -73,6 +72,9 @@ class Error 'message' => Config::get('show_error_msg') ? $exception->getMessage() : Config::get('error_message'), ]; } + + // 记录异常日志 + Log::write("[{$data['code']}]{$data['message']}[{$data['file']}:{$data['line']}]", 'error'); // 输出错误信息 self::output($exception, $data); // 禁止往下传播已处理过的异常 @@ -89,10 +91,15 @@ class Error */ public static function appError($errno, $errstr, $errfile, $errline) { - // 将错误信息托管至 think\exception\ErrorException - throw new ErrorException($errno, $errstr, $errfile, $errline); - // 禁止往下传播已处理过的异常 - return true; + if ($errno & Config::get('exception_ignore_type')) { + // 忽略的异常记录到日志 + Log::record("[{$data['code']}]{$data['message']}[{$data['file']}:{$data['line']}]", 'notic'); + } else { + // 将错误信息托管至 think\exception\ErrorException + throw new ErrorException($errno, $errstr, $errfile, $errline); + // 禁止往下传播已处理过的异常 + return true; + } } /** @@ -101,6 +108,9 @@ class Error */ public static function appShutdown() { + // 写入日志 + Log::save(); + if ($error = error_get_last()) { // 将错误信息托管至think\ErrorException $exception = new ErrorException(