将ThinkPHP5的错误日志放进数据库中,很多情况下,在生产服务器上的错误信息我们只能通过日志去查询,这样很是麻烦。如果将PHP的错误日志信息放到网站后台当中,岂不是更方便。
好,我们来改造一下:
第1步:创建数据库表:php_errorlog
CREATE TABLE `smg_php_errorlog` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`msg` VARCHAR(4000) NOT NULL DEFAULT '',
`create_time` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`server_ip` VARCHAR(15) NOT NULL DEFAULT '',
`php_version` VARCHAR(15) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
INDEX `create_time` (`create_time`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
第2步:在function.php中加上公共函数:
//记录php错误日志信息到数据库当中
if(!function_exists('php_errorlog')){
function php_errorlog($log)
{
$url = $_SERVER["REQUEST_SCHEME"].'://'.$_SERVER["SERVER_NAME"].'/'.$_SERVER["REQUEST_URI"].($_SERVER["QUERY_STRING"] ? '?'.$_SERVER["QUERY_STRING"] : '');
$data= [
"msg" => $log . '<hr>' . $url,
"create_time" => time(),
"server_ip" => (($_SERVER['SERVER_ADDR'] == '127.0.0.1') ? gethostbyname($_SERVER['SERVER_NAME']) : $_SERVER['SERVER_ADDR']),
"php_version" => PHP_VERSION,
];
//写数据库
Db::name("php_errorlog")->insert($data);
}
}
第3步:修改E:\www\thinkphp\library\think\exception\Handle.php 第57行,加入以下代码:
if($this->getCode($exception)){
$data = [
'file' => $exception->getFile(),
'line' => $exception->getLine(),
'message' => $this->getMessage($exception),
'code' => $this->getCode($exception),
];
$log = "[{$data['code']}]{$data['message']}[{$data['file']}:{$data['line']}]";
php_errorlog($log);
}
注:这里仅仅是将出错信息放进数据库,但路由没到方法里的错误是抓不到的。
第4步:将路由没到方法里的错误也抓下来:
第5步:随便找个方法写一个错误:比如:echo 1/0;,然后看看数据库:
第6步:做个后台显示出数据库的错误信息也就是了:
|