日志的處理
1. 前言
本小節(jié)主要介紹如何處理日志,正確的處理好日志可以快速的定位問題、分析問題、解決問題。假如你在工作中突然收到用戶反饋的某種報錯信息,然后他只告訴你錯誤的現(xiàn)象,但是不能重現(xiàn)這種錯誤,這個時候需要你排查出報錯的問題,如果沒有很好的記錄錯誤日志,那么排查起這種問題將會無從下手,若是有記錄錯誤日志、訪問日志、sql 日志等等,排查問題將會變得非常容易了。
2. 開啟調(diào)試模式查看日志
若把 .env
中的 APP_DEBUG
參數(shù)設(shè)置為 true
,可以開啟調(diào)試模式,當(dāng)調(diào)試模式開啟之后,系統(tǒng)會記錄大量的日志:
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
如下圖所示:
此時若調(diào)用之前的學(xué)生列表接口,在 runtime\log
中會產(chǎn)生日志,日志內(nèi)容如下圖:
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("內(nèi)部錯誤:".$exception->getMessage());
}
return json("請求成功");
}
}
Tips: 其中
Log::write('test:'.$exception->getMessage())
表示主動記錄日志。
請求接口之后,如下圖所示展示的主動打印的日志內(nèi)容:
4. 配置獨立日志
若想獨立出打印的日志內(nèi)容,可在 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("內(nèi)部錯誤:".$exception->getMessage());
}
return json("請求成功");
}
}
Tips: 其中
Log::write($exception->getMessage(),'test');
表示主動記錄日志至獨立日志文件test
中。
請求接口之后,如下圖所示展示的主動打印的日志內(nèi)容:
5. 獨立記錄 sql 日志
若在 config\log.php
中配置如下內(nèi)容:
Tips: 其中
sql
值表示開啟SQL
日志記錄。
配置好之后請求之前的學(xué)生列表接口,可以看到如下日志:
6. 獨立記錄 error 日志
若在 config\log.php
中配置如下內(nèi)容:
Tips: 其中
error
值表示開啟error
日志記錄,程序發(fā)生異常時框架底層會自動記錄到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("內(nèi)部錯誤:".$exception->getMessage());
// }
return json("請求成功");
}
}
如下圖所示:
請求接口之后,如下圖所示展示的主動打印的日志內(nèi)容:
7. 小結(jié)
本小節(jié)主要介紹了如何開啟日志記錄,日志的記錄可以很好的幫助定位問題、分析問題、解決問題,上面介紹了如何查看 sql
日志、error
日志,也可以使用 Log::write()
主動輸出日志。
Tips: 代碼倉庫:https://gitee.com/love-for-poetry/tp6