找回密码
 立即注册
搜索
查看: 370|回复: 0

[thinkphp] 将ThinkPHP5的错误日志放进数据库中

  [复制链接]
发表于 2023-2-22 22:09 | 显示全部楼层 |阅读模式

将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步:做个后台显示出数据库的错误信息也就是了:

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-12-22 09:38 , Processed in 0.028346 second(s), 13 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表