日志的处理
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