對(duì)于大型系統(tǒng)而言,日志是不可或缺的模塊,Laravel自然也對(duì)日志提供了完善的支持。目前Laravel集成了強(qiáng)大的Monolog庫(kù)進(jìn)行日志記錄。下面我們就來大致看一下Laravel中如何對(duì)日志進(jìn)行配置以及日志的簡(jiǎn)單使用。
1、日志處理器配置
首先我們來看日志處理器的配置。Laravel目前支持四種日志處理器:
single —— 將日志記錄到單個(gè)文件中。該日志處理器對(duì)應(yīng)Monolog的StreamHandler。
daily —— 以日期為單位將日志進(jìn)行歸檔,每天創(chuàng)建一個(gè)新的日志文件記錄日志。該日志處理器 對(duì)應(yīng)Monolog的RotatingFileHandler。
syslog —— 將日志記錄到syslog中。該日志處理器 對(duì)應(yīng)Monolog的SyslogHandler。
errorlog —— 將日志記錄到PHP的error_log中。該日志處理器 對(duì)應(yīng)Monolog的ErrorLogHandler。
項(xiàng)目實(shí)際日志處理器通過config/app.php中的log配置項(xiàng)決定,默認(rèn)配置值為single。這里我們使用默認(rèn)值,不做修改:
'log' => 'single',
當(dāng)然如果這四種方式滿足不了你的需求,還可以使用configureMonologUsing方法完全控制Monolog的日志處理器:
- $app->configureMonologUsing(function($monolog) {
- $monolog->pushHandler(...);
- });
注:必須將上述這段代碼置于bootstrap/app.php文件返回$app之前處才能生效。
2、使用Log記錄日志
配置完成后,就可以在代碼中使用Log門面來記錄日志,Log門面背后實(shí)際上是Illuminate/Log/Writer,而在Writer的構(gòu)造函數(shù)中注入了Monolog/Logger。生成的日志文件存放在storage/logs目錄下。
目前,Log門面支持八種日志級(jí)別(使用RFC 5424標(biāo)準(zhǔn)):
- Log::emergency($error); //緊急狀況,比如系統(tǒng)掛掉
- Log::alert($error); //需要立即采取行動(dòng)的問題,比如整站宕掉,數(shù)據(jù)庫(kù)異常等,這種狀況應(yīng)該通過短信提醒
- Log::critical($error); //嚴(yán)重問題,比如:應(yīng)用組件無效,意料之外的異常
- Log::error($error); //運(yùn)行時(shí)錯(cuò)誤,不需要立即處理但需要被記錄和監(jiān)控
- Log::warning($error); //警告但不是錯(cuò)誤,比如使用了被廢棄的API
- Log::notice($error); //普通但值得注意的事件
- Log::info($error); //感興趣的事件,比如登錄、退出
- Log::debug($error); //詳細(xì)的調(diào)試信息
下面我們就來分別演示下這幾種日志級(jí)別的日志記錄,我們將在TestController的log方法中進(jìn)行測(cè)試:
- public function log(){
- Log::emergency("系統(tǒng)掛掉了");
- Log::alert("數(shù)據(jù)庫(kù)訪問異常");
- Log::critical("系統(tǒng)出現(xiàn)未知錯(cuò)誤");
- Log::error("指定變量不存在");
- Log::warning("該方法已經(jīng)被廢棄");
- Log::notice("用戶在異地登錄");
- Log::info("用戶xxx登錄成功");
- Log::debug("調(diào)試信息");
- }
在瀏覽器中訪問http://laravel.app:8000/test/log,對(duì)應(yīng)在storage/logs/laravel.log記錄的日志信息如下:
[2015-11-09 14:24:05] local.EMERGENCY: 系統(tǒng)掛掉了
[2015-11-09 14:24:05] local.ALERT: 數(shù)據(jù)庫(kù)訪問異常
[2015-11-09 14:24:05] local.CRITICAL: 系統(tǒng)出現(xiàn)未知錯(cuò)誤
[2015-11-09 14:24:05] local.ERROR: 指定變量不存在
[2015-11-09 14:24:05] local.WARNING: 該方法已經(jīng)被廢棄
[2015-11-09 14:24:05] local.NOTICE: 用戶在異地登錄
[2015-11-09 14:24:05] local.INFO: 用戶xxx登錄成功
[2015-11-09 14:24:05] local.DEBUG: 調(diào)試信息
可見對(duì)應(yīng)的日志記錄包含了日志記錄時(shí)間、日志級(jí)別和日志消息等信息。當(dāng)然我們也可以在記錄日志時(shí)傳遞上下文信息:
Log::info("用戶xxx登錄成功",['user_id'=>1]);
對(duì)應(yīng)的日志記錄為:
[2015-11-09 14:25:47] local.INFO: 用戶xxx登錄成功 {"user_id":1}
如果要訪問底層Monolog的實(shí)例可以使用如下方法:
$monolog = Log::getMonolog();
dd($monolog);
我們可以在瀏覽器頁(yè)面中查看當(dāng)前Monolog對(duì)象實(shí)例的屬性信息:
Laravel Monolog 對(duì)象實(shí)例
我們可以從中看出當(dāng)前使用的日志處理器,日志記錄的位置,日志記錄的格式等信息。
新聞熱點(diǎn)
疑難解答