日志的處理工作是由系統(tǒng)自動(dòng)進(jìn)行的,在開啟日志記錄的情況下,會(huì)記錄下允許的日志級(jí)別的所有日志信息。
其中,為了性能考慮,SQL日志級(jí)別必須在調(diào)試模式開啟下有效,否則就不會(huì)記錄。 系統(tǒng)的日志記錄由核心的Think\Log類及其驅(qū)動(dòng)完成,提供了多種方式記錄了不同的級(jí)別的日志信息。
默認(rèn)情況下只是在調(diào)試模式記錄日志,要在部署模式開啟日志記錄,必須在配置中開啟LOG_RECORD
參數(shù),以及可以在應(yīng)用配置文件中配置需要記錄的日志級(jí)別,例如:
'LOG_RECORD' => true, // 開啟日志記錄'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只記錄EMERG ALERT CRIT ERR 錯(cuò)誤
日志的記錄并非實(shí)時(shí)保存的,只有當(dāng)當(dāng)前請(qǐng)求完成或者異常結(jié)束后才會(huì)實(shí)際寫入日志信息,否則只是記錄在內(nèi)存中。
日志級(jí)別
ThinkPHP對(duì)系統(tǒng)的日志按照級(jí)別來分類,包括:
EMERG 嚴(yán)重錯(cuò)誤,導(dǎo)致系統(tǒng)崩潰無法使用
ALERT 警戒性錯(cuò)誤, 必須被立即修改的錯(cuò)誤
CRIT 臨界值錯(cuò)誤, 超過臨界值的錯(cuò)誤
ERR 一般性錯(cuò)誤
WARN 警告性錯(cuò)誤, 需要發(fā)出警告的錯(cuò)誤
NOTICE 通知,程序可以運(yùn)行但是還不夠完美的錯(cuò)誤
INFO 信息,程序輸出信息
DEBUG 調(diào)試,用于調(diào)試信息
SQL SQL語句,該級(jí)別只在調(diào)試模式開啟時(shí)有效
記錄方式
日志的記錄方式默認(rèn)是文件方式,可以通過驅(qū)動(dòng)的方式來擴(kuò)展支持更多的記錄方式。
記錄方式由LOG_TYPE參數(shù)配置,例如:
'LOG_TYPE' => 'File', // 日志記錄類型 默認(rèn)為文件方式
File方式記錄,對(duì)應(yīng)的驅(qū)動(dòng)文件位于系統(tǒng)的Library/Think/Log/Driver/File.class.php
。
手動(dòng)記錄
一般情況下,系統(tǒng)的日志記錄是自動(dòng)的,無需手動(dòng)記錄,但是某些時(shí)候也需要手動(dòng)記錄日志信息,Log類提供了3個(gè)方法用于記錄日志。
方法 | 描述 |
---|
Log::record() | 記錄日志信息到內(nèi)存 |
Log::save() | 把保存在內(nèi)存中的日志信息(用指定的記錄方式)寫入 |
Log::write() | 實(shí)時(shí)寫入一條日志信息 |
由于系統(tǒng)在請(qǐng)求結(jié)束后會(huì)自動(dòng)調(diào)用Log::save方法,所以通常,你只需要調(diào)用Log::record記錄日志信息即可。
record方法用法如下:
Think\Log::record('測(cè)試日志信息');
默認(rèn)的話記錄的日志級(jí)別是ERR,也可以指定日志級(jí)別:
Think\Log::record('測(cè)試日志信息,這是警告級(jí)別','WARN');
record方法只會(huì)記錄當(dāng)前配置允許記錄的日志級(jí)別的信息,如果應(yīng)用配置為:
'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只記錄EMERG ALERT CRIT ERR 錯(cuò)誤
那么上面的record方法記錄的日志信息會(huì)被直接過濾,或者你可以強(qiáng)制記錄:
Think\Log::record('測(cè)試日志信息,這是警告級(jí)別','WARN',true);
采用record方法記錄的日志信息不是實(shí)時(shí)保存的,如果需要實(shí)時(shí)記錄的話,可以采用write方法,例如:
Think\Log::write('測(cè)試日志信息,這是警告級(jí)別,并且實(shí)時(shí)寫入','WARN');
write方法寫入日志的時(shí)候 不受配置的允許日志級(jí)別影響,可以實(shí)時(shí)寫入任意級(jí)別的日志信息。