### 2019 年 7 月 28 日 發布
`6.0`的日志類比之前版本完善了很多,主要新特性包括:
* 日志信息格式化
* 多通道寫入支持
* 延時/實時寫入
* 日志信息處理事件
* 日志級別指定通道寫入
* 支持關閉日志/通道
新版的日志類最大的變化就是支持多通道寫入,也就是說你可以同時或者給部分日志類型增加另外的日志通道寫入,例如對于一些異常日志可以選擇發送錯誤到郵件通知。
其它的變化主要包括:
* WEB日志和CLI日志合并并統一格式;
* 默認不再記錄訪問信息,需要可以自己記錄;
* 獨立日志也支持JSON格式記錄;
日志的相關配置可以在`config/log.php`文件中設置,本篇主要描述下新版日志的變化。
## 日志通道
日志通道的概念相當于給日志信息做了一個日志空間,每個日志通道的日志信息采用獨立的寫入機制或者配置參數,你可以給日志信息指定默認的日志通道,也可以動態切換通道寫入,并且支持同一個日志信息同時寫入多個日志通道。
你可以在日志配置文件的`channels`配置中定義通道,默認僅定義了一個`file`通道
```
// 日志通道列表
'channels' => [
'file' => [
// 日志記錄方式
'type' => 'File',
// 日志保存目錄
'path' => '',
// 單文件日志寫入
'single' => false,
// 獨立日志級別
'apart_level' => [],
// 最大日志文件數量
'max_files' => 0,
// 使用JSON格式記錄
'json' => false,
// 日志輸出格式化
'format' => '[%s][%s] %s',
// 是否實時寫入
'realtime_write' => false,
],
// 其它日志通道配置
],
```
每個日志通道必須指定`type`參數,該參數決定了日志的寫入方式是什么,`file`就表示文件日志方式寫入,如果需要指定其它的寫入方式需要安裝額外的擴展。但你也可以給不同的日志通道指定相同的`type`,只是其它的配置參數不同,例如寫入的路徑不同之類。
無論使用什么日志寫入類型,每個日志通道可以支持的通用配置如下:
參數|說明
---|---
level|日志通道記錄的日志級別
realtime_write|日志是否實時寫入
`level`參數的用法和全局日志配置一致,除了在命令行模式下,默認的日志都是在請求結束后統一一次性寫入,如果需要實時寫入日志信息需要設置。
```
'realtime_write' => true,
```
>[danger] 如果在命令行下,無論是否設置都會自動實時寫入日志。
### 默認通道
通過設置`default`參數定義日志的默認通道,例如:
```
'default' => 'file',
```
### 級別通道
可以設置不同的日志級別使用不同的日志通道
```
'type_channel' => [
// 對于error日志級別 同時寫入file和email兩個日志通道
'error' => ['file','email'],
]
```
>[danger] 設置了級別通道后,該級別的日志不會記錄到默認通道,請注意。
日志通道需要日志驅動的配合,你也可以自定義日志驅動。
### 切換通道
你也可以手動切換當前的日志的默認寫入通道,例如:
```
Log::channel('email')->info('這是日志信息');
```
支持切換使用多個通道記錄,例如:
```
Log::channel(['email', 'file'])->info('這是日志信息');
```
## 日志處理
日志寫入支持事件監聽,例如。
~~~
Event::listen('think\event\LogWrite', function($event) {
if('file' == $event->channel) {
$event->log['info'][] = 'test info';
}
});
~~~
閉包的參數是`LogWrite`事件類對象實例,你可以獲取兩個屬性:
屬性名|描述
----|----
channel |寫入日志的通道名
log |寫入的日志信息
日志信息是一個二維數組,包含了當前日志通道下(允許記錄的)所有級別的日志信息。
## 格式化日志信息
系統提供了兩個參數用于日志信息的格式化,第一個是用于自定義時間顯示格式的`time_format`,第二個是調整日志輸出格式的`format`參數。
```
'channels' => [
'file' => [
'type' => 'file',
'json' => true
'file_size' => 1024*1024*10,
'time_format' => 'Y-m-d H:i:s',
'format' => '[%s][%s]:%s',
],
],
```
`format`參數的第一個`%s`是日志記錄時間(日志時間的格式化由`time_format`參數定義) 第二個`%s`是日志級別 第三個`%s`是日志信息,順序不能調整。
## JSON格式日志
可以支持`JSON`格式記錄文件日志,更加方便一些第三方日志分析工具進行日志分析。
在日志配置文件中,添加
~~~
return [
'default' => 'file',
'channels' => [
'file' => [
'type' => 'file',
'json' => true
'file_size' => 1024*1024*10,
],
],
];
~~~
即可開啟`JSON`格式記錄,CLI命令行的日志記錄同樣有效。
>[danger] 和之前版本的區別在于,新版的每個日志信息都是一條JSON數據(舊版本是每個請求一條JSON數據)。
## 關閉日志
你可以通過調用`close`方法動態關閉日志寫入。
```
// 關閉全局日志寫入
Log::close();
// 關閉某個通道日志寫入
Log::close('file');
```
如果調用`close`方法動態關閉日志,會自動調用`clear`方法清空日志。
## 清空日志
一旦執行`save`方法后,內存中的日志信息就會被自動清空,如果需要提前清空日志可以使用:
```
// 清空所有日志
Log::clear();
//清空通道日志可以使用
Log::clear('file');
```
在清空日志方法之前,你可以使用`getLog`方法獲取內存中的日志。
~~~
// 獲取(默認通道)日志
$logs = Log::getLog();
// 獲取指定通道日志
$logs = Log::getLog('file');
~~~
>[danger] 日志清空僅僅是清空內存中的日志。
## 自定義驅動
日志通道需要自定義日志驅動,該日志驅動需要實現`think\contract\LogHandlerInterface`接口。
```
interface LogHandlerInterface
{
/**
* 日志寫入接口
* @access public
* @param array $log 日志信息
* @return bool
*/
public function save(array $log): bool;
}
```
- 值得升級到5.1的18個理由
- 5.1.7版本新特性
- JSON字段類型在ORM中的使用
- 文件下載響應對象
- 教你使用5.1的數組對象查詢
- 模型三大利器之一:搜索器
- 在ThinkPHP中使用Yaconf
- 掌握命令行的表格輸出
- 5.1.25查詢參數綁定的改進
- ThinkPHP安全規范指引
- 巧用數據集的排序功能實現統計排序
- think-orm ——基于5.1的獨立ORM庫
- think-template——基于ThinkPHP的獨立模板引擎
- ThinkPHP5.1.26版本發布——修正版本,包含安全更新
- ThinkPHP5.0和3.2再發安全更新
- 官宣:ThinkPHP發布首個LTS版本
- 你真的了解Db類和模型的正確使用姿勢么?
- 如何更有效的記錄和管理日志
- 模型三大利器之二:修改器
- ThinkPHP5.1.28版本發布——修正上一版本問題,改進關聯查詢
- 模型三大利器之三:獲取器
- API版本控制的幾種思路
- ThinkPHP5.2第一個Beta版本發布測試
- 讓你少犯錯的數據查詢基本原則
- ThinkPHP發布5.1.29版本——常規更新
- 這15個好習慣讓你更容易升級到5.2
- 如何有效提高ThinkPHP的應用性能
- 讓你提高開發效率的查詢技巧
- 模型關聯查詢不完全指南
- 5.2發布Beta2版本——統一和精簡大量用法
- ThinkPHP發布5.1.30版本——支持微秒時間字段寫入
- ThinkPHP的數據緩存使用
- ThinkPHP5.2安裝及入口文件
- ThinkPHP榮獲2018 年度最受歡迎中國開源開發框架第1名
- 5.1路由使用心得技巧
- ThinkPHP5.*版本發布安全更新
- ThinkPHP項目及代碼規范指北
- 5.2版本的設計規范指導
- ThinkPHP5.1.32版本發布——圣誕快樂
- 利用Trait特性給模型增加樂觀鎖功能
- 5.2數據庫和模型的變化(摘要)
- ThinkPHP模板引擎實現和常見問題
- ThinkPHP5.0.24版本發布——安全更新
- 不忘初心,方得始終——ThinkPHP十三周年報告
- ThinkPHP5+相關資源匯總
- 異步社區ThinkPHP周年慶專享優惠活動
- 5.2路由的調整和改進
- ThinkPHP發布5.1.33版本——包含安全更新
- ThinkPHP擴展開發指南
- ThinkPHP發布5.2Beta3版本
- ThinkPHP發布5.1.34版本——喜迎新年
- ThinkPHP發布5.2RC1版本
- ThinkPHP發布5.1.35版本——常規更新
- 5.2配置類的調整
- 5.2時間查詢的改進和優化
- 5.2RC版本升級不完全指導(僅供學習參考)
- ThinkPHP5.2版本正式變更為6.0版本
- ThinkPHP百度云云虛擬主機專享免費活動
- 事件系統以及查詢事件、模型事件的使用
- ThinkPHP6.0RC2版本發布——架構升級、精簡核心
- ThinkPHP5.1.36LTS版本發布——常規更新
- 新版Session和Cookie設計變化
- ThinkPHP5.1.37版本發布——常規更新
- ThinkPHP6.0RC3版本發布——細節完善,體驗優化
- 6.0中間件使用詳解
- Composer各大廠商鏡像地址
- ThinkPHP6.0發布計劃公告
- 「ThinkPHP開發者周刊」招募志愿者
- ThinkPHP6.0日志變化
- ThinkPHP5.1.38版本發布——常規更新
- ThinkPHP6.0RC4版本發布——ORM獨立,日志多通道支持
- ThinkORM2.0開發指南上線
- ThinkPHP6.0RC5版本發布——多應用模式獨立,中間件機制調整
- ThinkPHP6.0版本發布——程序員節福利
- ThinkPHP5.1.39LTS版本發布——常規更新
- ThinkPHP6.0.1版本發布——圣誕快樂!
- 回顧2019,展望2020!
- ThinkPHPV6.0.2版本發布——2020新春快樂!
- 周年福利系列:Swoole合作優惠
- 億速云成為ThinkPHPV6.0獨家贊助發布商??
- 新冠疫情工具和限免資源專題(保持更新中)
- 周年福利系列:創宇信用認證合作優惠
- 周年福利系列:碼云企業版限時10%優惠
- 周年福利系列:想天短說抵現優惠
- think-swoole直播:從零開始掌握swoole開發
- 周年福利系列:B2C開源電商ShopXO授權8折優惠
- 周年福利系列:LayuiAdmin 永久授權限時優惠
- ThinkPHP資源導航站上線——構建生態 服務未來
- ThinkPHP官方技術支持服務和應用服務市場上線公測
- ThinkPHP市場精選——推廣基本要素
- ThinkPHP市場精選——客服聊天專題
- ThinkPHPV6.0.3版本發布——端午安康
- ThinkPHP開發者扶持計劃
- 6.0.3版本關鍵更新及升級事項
- 「ThinkPHP開發者周刊」改版重啟
- ThinkPHP市場精選——企業建站專題
- ThinkPHP 提供統一API接口服務
- ThinkPHP市場精選——直播電商專題
- ThinkAPI服務SDK發布
- 官方服務市場啟用獨立子域名
- ThinkPHP市場精選——刷臉支付專題
- ThinkAPI推出會員服務計劃
- ThinkPHPV6.0.4版本發布——中秋國慶雙節快樂
- ThinkPHPV5.1.40版本發布——常規更新
- 1024程序員節福利走一波
- ThinkPHP V6.0.5版本發布——兼容Composer2.0
- 知識圖譜應用場景——源論技術沙龍
- ThinkPHP5.*版本改進Composer2.0的兼容
- 官方市場雙十一精選推薦
- 技術人做產品有機會么(文末送課程)
- 本周秒殺——古德云售后獲客營銷系統
- ThinkAPI服務更新——支持接口分組和PHP版本依賴調整
- PHP8新特性盤點
- PHP8新特性系列:構造器屬性提升使用及注意事項
- ThinkPHP2021新年寄語
- ThinkPHP V6.0.6&V5.1.41版本發布——兼容PHP8.0
- PHP如何更優雅地調用API接口
- ThinkPHP V6.0.7發布——修正版本
- ThinkAPI服務更新——IP白名單
- 最新版ThinkORM對于時間字段的調整
- ThinkAPI短信接口正式上線
- ThinkPHP V6.0.8版本發布——多環境變量配置支持
- 頂想云寫作服務開啟第一次公測
- ThinkSSL上線——官方SSL/TLS證書服務
- MDBootstrap國內用戶福利——ThinkPHP官方市場首發
- ThinkPHP V6.0.9版本發布——常規更新
- ThinkORM功能盤點——虛擬模型
- 全面支持主流GIT版本庫——云寫作服務第二次公測
- 云寫作服務私有化部署方案之:版本庫私有化
- 看云雙十一活動
- ThinkPHP V6.0.10LTS發布——兼容PHP8.1
- ThinkPHP V6.0.12發布——命令行兼容8.1
- 頂想云知識管理上線公測——構建企業文檔中心和知識庫
- 頂想云上線——助力生態數字化建設
- 618活動進行中——官方市場迎來一波更新
- 頂想云知識管理正式上線——看云文檔啟動遷移服務
- ThinkPHP V6.0.13發布——常規更新
- 頂想云網站助理服務上線——構建產品支持服務
- ThinkPHP發布6.1.0&6.0.14版本——安全更新
- ThinkPHP新版社區上線試運營
- ThinkAPI上架人臉核身接口——助力網站實名認證
- 辭舊迎新——舊版社區停止注冊及發帖
- ThinkPHP6.1.2版本發布——兼容PHP8.2