日志記錄由 `\think\Log`類完成。
## 日志初始化
在使用日志記錄之前,首先需要初始化日志類,指定當前使用的日志記錄方式。
~~~
\think\Log::init(['type'=>'File','path'=>APP_PATH.'logs/']);
~~~
上面在日志初始化的時候,指定了文件方式記錄日志,并且日志保存目錄為`APP_PATH.'logs/'`。
> 不同的日志類型可能會使用不同的初始化參數。
## 日志級別
ThinkPHP對系統的日志按照級別來分類,并且這個日志級別完全可以自己定義,系統內部使用的級別包括:
* **log**?常規日志,用于記錄日志
* **error**?錯誤,一般會導致程序的終止
* **notice**?警告,程序可以運行但是還不夠完美的錯誤
* **info**?信息,程序輸出信息
* **debug**?調試,用于調試信息
* **sql**?SQL語句,用于SQL記錄,只在數據庫的調試模式開啟時有效
## 記錄方式
日志的記錄方式默認是文件方式,可以通過驅動的方式來擴展支持更多的記錄方式。
記錄方式由`log.type`參數配置,例如:
~~~
'log' => [
'type' => 'File',
'path' => LOG_PATH,
],
~~~
> File方式記錄,對應的驅動文件位于系統的`library/think/log/driver/File.php`。
## 手動記錄
一般情況下,系統的日志記錄是自動的,無需手動記錄,但是某些時候也需要手動記錄日志信息,Log類提供了3個方法用于記錄日志。
| 方法 | 描述 |
| --- | --- |
| Log::record() | 記錄日志信息到內存 |
| Log::save() | 把保存在內存中的日志信息(用指定的記錄方式)寫入 |
| Log::write() | 實時寫入一條日志信息 |
由于系統在請求結束后會自動調用Log::save方法,所以通常,你只需要調用Log::record記錄日志信息即可。
record方法用法如下:
~~~
\think\Log::record('測試日志信息');
~~~
默認的話記錄的日志級別是INFO,也可以指定日志級別:
~~~
\think\Log::record('測試日志信息,這是警告級別','notice');
~~~
采用record方法記錄的日志信息不是實時保存的,如果需要實時記錄的話,可以采用write方法,例如:
~~~
\think\Log::write('測試日志信息,這是警告級別,并且實時寫入','notice');
~~~
## 日志寫入
日志可以通過驅動支持不同的方式寫入,默認日志會記錄到文件中,系統已經支持的寫入方式包括 `File/Sae/Socket`,如果要使用Socket方式寫入,可以設置:
~~~
'log' => [
'type' => 'socket',
'host' => 'slog.thinkphp.cn',
//日志強制記錄到配置的client_id
'force_client_ids' => [],
//限制允許讀取日志的client_id
'allow_client_ids' => [],
],
~~~
Socket驅動采用了SocketLog類庫,更多的關于SocketLog的資料請參考調試章節。
## 異常通知
當發生異常的情況下,可以設置是否發送通知,要啟用該功能,首先需要設置通知參數,在應用的公共文件添加如下代碼:
~~~
// 設置異常通知方式 采用郵件發送
\think\Log::alarm(['type'=>'email','address'=>'thinkphp@q.com']);
~~~
可以通過添加驅動支持其他的通知方式。