日志的处理

1. 前言

本小节主要介绍如何处理日志,正确的处理好日志可以快速的定位问题、分析问题、解决问题。假如你在工作中突然收到用户反馈的某种报错信息,然后他只告诉你错误的现象,但是不能重现这种错误,这个时候需要你排查出报错的问题,如果没有很好的记录错误日志,那么排查起这种问题将会无从下手,若是有记录错误日志、访问日志、sql 日志等等,排查问题将会变得非常容易了。

2. 开启调试模式查看日志

若把 .env 中的 APP_DEBUG 参数设置为 true,可以开启调试模式,当调试模式开启之后,系统会记录大量的日志:

APP_DEBUG = false

[APP]
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE]
TYPE = mysql
HOSTNAME = 49.xxx.xx.xx
DATABASE = item_name
USERNAME = xxxxxx
PASSWORD = xxxxxx
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true

[LANG]
default_lang = zh-cn

如下图所示:
图片描述

此时若调用之前的学生列表接口,在 runtime\log 中会产生日志,日志内容如下图:
图片描述

Tips:从图中可以看出日志中主要记录了一些 sql 逻辑。

3. 主动打印日志

这里还是以前面异常处理类 ExceptionController 为例,按照如下方式可以主动输出日志:

<?php


namespace app\controller\Study;


use app\BaseController;
use app\controller\Service\StudentService;
use think\facade\Log;

class ExceptionController extends BaseController
{
    public function testException()
    {
        try{
            $studentService = new StudentService();
            $studentService->update();
        }catch(\Exception $exception){
            Log::write('test:'.$exception->getMessage());
            return json("内部错误:".$exception->getMessage());
        }
        return json("请求成功");
    }
}

Tips: 其中 Log::write('test:'.$exception->getMessage()) 表示主动记录日志。

请求接口之后,如下图所示展示的主动打印的日志内容:
图片描述

4. 配置独立日志

若想独立出打印的日志内容,可在 config\log.php 配置文件中配置如下信息:
图片描述
然后按照如下方式可以主动输出日志:

<?php


namespace app\controller\Study;


use app\BaseController;
use app\controller\Service\StudentService;
use think\facade\Log;

class ExceptionController extends BaseController
{
    public function testException()
    {
        try{
            $studentService = new StudentService();
            $studentService->update();
        }catch(\Exception $exception){
            Log::write($exception->getMessage(),'test');
            return json("内部错误:".$exception->getMessage());
        }
        return json("请求成功");
    }
}

Tips: 其中 Log::write($exception->getMessage(),'test'); 表示主动记录日志至独立日志文件 test 中。

请求接口之后,如下图所示展示的主动打印的日志内容:
图片描述

5. 独立记录 sql 日志

若在 config\log.php 中配置如下内容:
图片描述

Tips: 其中 sql 值表示开启 SQL 日志记录。

配置好之后请求之前的学生列表接口,可以看到如下日志:
图片描述

6. 独立记录 error 日志

若在 config\log.php 中配置如下内容:
图片描述

Tips: 其中 error 值表示开启 error 日志记录,程序发生异常时框架底层会自动记录到 error 日志中。

这里以之前 ExceptionController 类为例,注释掉异常捕获代码:

<?php


namespace app\controller\Study;


use app\BaseController;
use app\controller\Service\StudentService;
use think\facade\Log;

class ExceptionController extends BaseController
{
    public function testException()
    {
//        try{
            $studentService = new StudentService();
            $studentService->update();
//        }catch(\Exception $exception){
//            Log::write($exception->getMessage(),'test');
//            return json("内部错误:".$exception->getMessage());
//        }
        return json("请求成功");
    }
}

如下图所示:
图片描述

请求接口之后,如下图所示展示的主动打印的日志内容:
图片描述

7. 小结

本小节主要介绍了如何开启日志记录,日志的记录可以很好的帮助定位问题、分析问题、解决问题,上面介绍了如何查看 sql 日志、error 日志,也可以使用 Log::write() 主动输出日志。

Tips: 代码仓库:https://gitee.com/love-for-poetry/tp6