在開發環境中,打log是很是必須的,特別是在走前端開發的異步請求,異步請求不少時候打log是比較麻煩的,不是將錯誤信息返回前端的js用console來輸出或者alert或者document.write,除了console還算不錯外其餘的方法都是會終端進程,不能作到靜默的大log,而就算是console也是有不便之處。好比說,異步的話,原本就是會返回信息的(大多數狀況下),再返回錯誤信息,而後再在ajax的代碼中輸出錯誤信息,這樣作就要修改代碼,改來改去,註釋來註釋去,非常麻煩(一次兩次還好)。我的認爲應對這種狀況最好的打log方法就是在後端中打log。php
在原生的php開發環境中,能夠本身寫一個寫入文件的函數或者類來打log。在ThinkPHP是有提供打log的封裝方法的,它本身也會自動記錄運行日誌,也能夠手動打log,另外本身封裝的方法或者類的話,當放到生產環境上,還可能會有讀寫權限問題,這是你又要用命令去給予日誌文件的讀寫權限(若是隻是一次兩次還好,然而開發都是要迭代至關多的版本的),分享一下這種方法:前端
先來個簡單版的:ajax
<?php namespace Home\Controller; use Think\Controller; use Think\Log; //1.使用Log類的命名空間 class IndexController extends Controller { public function index(){ Log::write("尼瑪這原來是日誌2423424"); //2.調用Log的write方法實時進行日誌寫入 $this->display(); } }
你能夠在下面的目錄中找到你的日誌:後端
下面是ThinkPHP的官方手冊詳細解析(懶人的話,上面的簡單版就夠用了):異步
其中,爲了性能考慮,SQL日誌級別必須在調試模式開啓下有效,不然就不會記錄。 系統的日誌記錄由核心的Think\Log類及其驅動完成,提供了多種方式記錄了不一樣的級別的日誌信息。函數
默認狀況下只是在調試模式記錄日誌,要在部署模式開啓日誌記錄,必須在配置中開啓LOG_RECORD
參數,以及能夠在應用配置文件中配置須要記錄的日誌級別,例如:性能
'LOG_RECORD' => true, // 開啓日誌記錄 'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只記錄EMERG ALERT CRIT ERR 錯誤
日誌的記錄並不是實時保存的,只有噹噹前請求完成或者異常結束後纔會實際寫入日誌信息,不然只是記錄在內存中。測試
ThinkPHP對系統的日誌按照級別來分類,包括:this
日誌的記錄方式默認是文件方式,能夠經過驅動的方式來擴展支持更多的記錄方式。spa
記錄方式由LOG_TYPE參數配置,例如:
'LOG_TYPE' => 'File', // 日誌記錄類型 默認爲文件方式
File方式記錄,對應的驅動文件位於系統的
Library/Think/Log/Driver/File.class.php
。
通常狀況下,系統的日誌記錄是自動的,無需手動記錄,可是某些時候也須要手動記錄日誌信息,Log類提供了3個方法用於記錄日誌。
方法 | 描述 |
---|---|
Log::record() | 記錄日誌信息到內存 |
Log::save() | 把保存在內存中的日誌信息(用指定的記錄方式)寫入 |
Log::write() | 實時寫入一條日誌信息 |
因爲系統在請求結束後會自動調用Log::save方法,因此一般,你只須要調用Log::record記錄日誌信息便可。
record方法用法以下:
Think\Log::record('測試日誌信息');
默認的話記錄的日誌級別是ERR,也能夠指定日誌級別:
Think\Log::record('測試日誌信息,這是警告級別','WARN');
record方法只會記錄當前配置容許記錄的日誌級別的信息,若是應用配置爲:
'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只記錄EMERG ALERT CRIT ERR 錯誤
那麼上面的record方法記錄的日誌信息會被直接過濾,或者你能夠強制記錄:
Think\Log::record('測試日誌信息,這是警告級別','WARN',true);
採用record方法記錄的日誌信息不是實時保存的,若是須要實時記錄的話,能夠採用write方法,例如:
Think\Log::write('測試日誌信息,這是警告級別,而且實時寫入','WARN');