日志驅動
日志可以通過驅動支持不同的方式寫入,默認日志會記錄到文件中,系統已經內置的寫入驅動包括 File
、Socket
,如果要臨時關閉日志寫入,可以設置日志類型為Test即可,例如:
'log' => [ // 可以臨時關閉日志寫入 'type' => 'test', ],
File
驅動
日志的記錄方式默認是File
方式,可以通過驅動的方式來擴展支持更多的記錄方式。
記錄方式由log.type
參數配置,例如:
'log' => [ // 日志記錄方式,支持 file socket 'type' => 'File', //日志保存目錄 'path' => LOG_PATH, //單個日志文件的大小限制,超過后會自動記錄到第二個文件 'file_size' =>2097152, //日志的時間格式,默認是` c ` 'time_format' =>'c' ],
為了避免同一個目錄下面的日志文件過多的性能問題,
file
方式記錄的日志文件會自動生成日期子目錄。
Scoket
驅動
Socket驅動配置,具體參考后面的遠程調試
部分。
其他驅動
thinkphp5.0支持SAE
驅動的擴展,具體參考“SAE”章節
每個日志記錄方式需要對應一個日志驅動文件,例如File方式記錄,對應的驅動文件是
library/think/log/driver/File.php
。
關閉日志
系統並未提供關閉日志的方法,但有兩種方式可以關閉日志的寫入,第一種方式是設置日志類型為test,即可不寫入任何日志。第二種方式是后面會提到的設置日志記錄級別。
日志寫入
版本 | 新增功能 |
---|---|
5.0.4 | 命令行模式下日志自動定時寫入 |
5.0.4 | debug 日志類型僅用於調試模式記錄 |
手動記錄
一般情況下,系統的日志記錄是自動的,無需手動記錄,但是某些時候也需要手動記錄日志信息,Log類提供了3個方法用於記錄日志。
方法 | 描述 |
---|---|
Log::record() | 記錄日志信息到內存 |
Log::save() | 把保存在內存中的日志信息(用指定的記錄方式)寫入 |
Log::write() | 實時寫入一條日志信息 |
由於系統在請求結束后會自動調用Log::save
方法,所以通常,你只需要調用Log::record
記錄日志信息即可。
record方法用法如下:
Log::record('測試日志信息');
默認的話記錄的日志級別是INFO,也可以指定日志級別:
Log::record('測試日志信息,這是警告級別','notice');
采用record方法記錄的日志信息不是實時保存的,如果需要實時記錄的話,可以采用write方法,例如:
Log::write('測試日志信息,這是警告級別,並且實時寫入','notice');
V5.0.4+版本開始,為避免內容溢出,在命令行下面執行的話 日志信息會定時自動寫入。
日志級別
ThinkPHP對系統的日志按照級別來分類,並且這個日志級別完全可以自己定義,系統內部使用的級別包括:
- log 常規日志,用於記錄日志
- error 錯誤,一般會導致程序的終止
- notice 警告,程序可以運行但是還不夠完美的錯誤
- info 信息,程序輸出信息
- debug 調試,用於調試信息
- sql SQL語句,用於SQL記錄,只在數據庫的調試模式開啟時有效
系統提供了不同日志級別的快速記錄方法,例如:
Log::error('錯誤信息'); Log::info('日志信息'); // 和下面的用法等效 Log::record('錯誤信息','error'); Log::record('日志信息','info');
還封裝了一個助手函數用於日志記錄,例如:
trace('錯誤信息','error'); trace('日志信息','info');
也支持指定級別日志的輸入,需要配置信息:
'log' => [ 'type' => 'File', // 日志記錄級別,使用數組表示 'level' => ['error'], ],