W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
你可以通過 log_message()
方法將信息記錄在本地日志文件中,并且必須在第一個參數(shù)中指定錯誤的”級別”,來表明這個信息的類型(debug,error等)。 第二個參數(shù)就是信息本身:
if ($some_var == '')
{
log_message('error', 'Some variable did not contain a value.');
}
總共有八種不同的事件報錯級別,與 RFC 5424 中所定義的錯誤級別一一對應(yīng),它們是:
* **debug** - 詳細(xì)的debug信息。
* **info** - 你的應(yīng)用中的一些有意義的事件,例如用戶登錄,記錄SQL語句等。
* **notice** - 你的應(yīng)用中的一些正常但明顯有價值的事件。
* **warning** - 出現(xiàn)了異常,但不是錯誤,例如使用了被廢棄的API,某個API的調(diào)用異常,或其他不期望出現(xiàn)的,但不是錯誤的情況。
* **error** - 運行時錯誤,不需要立即被處理但通常需要被記錄或者監(jiān)控。
* **critical** - 危險情況,例如某個程序組件不可用,或出現(xiàn)未被捕獲的異常等。
* **alert** - 告警,必須采取行動來修復(fù),例如整個網(wǎng)站宕機或數(shù)據(jù)庫無法訪問等。
* **emergency** - 系統(tǒng)不可用。
日志系統(tǒng)不提供警告系統(tǒng)管理員或網(wǎng)站管理者的方法,只是單純的記錄信息。對于諸多更為危險的錯誤級別,日志就會被異常調(diào)度器自動拋出,如上所述。
你可以修改 /app/Config/Logger.php
配置文件來修改哪些級別的事件會被實際記錄,以及為不同的事件等級分配不同的日志記錄器等。
配置文件中的 threshold
(報錯閾值)決定了從哪個級別開始的事件將會在整個應(yīng)用中記錄下來。如果應(yīng)用中有任何低于報錯閾值的事件記錄被記錄時,這些請求將會被忽略。 最為簡單的使用閾值的方法就是將其設(shè)為你希望記錄的報錯等級的最低值。舉例來說,如果你想記錄warning信息,而不是information信息,就需要將報錯閾值設(shè)為 5
。所有報錯等級低于5的日志記錄請求 (包括運行時錯誤,系統(tǒng)錯誤等)將會被記錄,而info, notice和debug級別的錯誤就會被忽略:
public $threshold = 5;
關(guān)于報錯級別和對應(yīng)的閾值的列表列舉在配置文件中以供參閱。
你可以通過給報錯閾值賦值一個包含報錯等級數(shù)字的數(shù)組,來選擇特定的報錯級別:
// 只記錄debug和info類型的報錯
public $threshold = [5, 8];
日志系統(tǒng)支持同時使用多種調(diào)度器來處理日志記錄。每一種調(diào)度器可以獨立地設(shè)置用于特定的錯誤等級,并忽略其他的?,F(xiàn)狀而言,我們默認(rèn)安裝了兩種調(diào)度器以供使用:
調(diào)度器配置于主配置文件中的 $handlers
屬性中,這一屬性的格式為一個包含一組調(diào)度器和它們對應(yīng)的配置的數(shù)組。 每個調(diào)度器被定義數(shù)組的鍵,格式為完整命名空間格式的類名,而對應(yīng)的值就是一個數(shù)組。 每個調(diào)度器配置塊中都會有一個通用的屬性: handle
,對應(yīng)著該調(diào)度器將要記錄的報錯級別的 名字
public $handlers = [
//--------------------------------------------------------------------
// 文件調(diào)度器
//--------------------------------------------------------------------
'CodeIgniter\Log\Handlers\FileHandler' => [
'handles' => ['critical', 'alert', 'emergency', 'debug', 'error', 'info', 'notice', 'warning'],
]
];
我們經(jīng)常會根據(jù)上下文來修改記錄信息的某些細(xì)節(jié)。比如說,可能會記錄用戶ID,IP地址,當(dāng)前的POST變量等。 你可以通過在信息中使用通配符來實現(xiàn)。每個通配符必須被大括號({}) 包裹起來。在第三個參數(shù)中,你需要提供一個包含有通配符名,與其對應(yīng)值的數(shù)組。 這些內(nèi)容將會插入到記錄信息字符串中:
// 生成一條例如這樣的信息:用戶123登錄系統(tǒng),登錄IP為127.0.0.1
$info = [
'id' => $user->id,
'ip_address' => $this->request->ip_address()
];
log_message('info', 'User {id} logged into the system from {ip_address}', $info);
如果你想記錄一條異常或一個錯誤,你可以使用”exception”作為鍵,對應(yīng)的值就是這條異常或錯誤本身。 這樣一來這個異常或錯誤對象包含的錯誤信息,文件名和對應(yīng)行號就會生成一條字符串。 你需要在記錄信息中中提供exception通配符:
try
{
... 一些能拋出異常的代碼
}
catch (\Exception $e)
{
log_message('error', '[ERROR] {exception}', ['exception' => $e]);
}
存在幾個核心占位符,它們會根據(jù)當(dāng)前頁面請求為您自動擴(kuò)展:
占位符 | 插入值 |
---|---|
{post_vars} | $ _POST變量 |
{get_vars} | $ _GET變量 |
{session_vars} | $ _SESSION變量 |
{env} | 當(dāng)前環(huán)境名稱 |
{file} | 調(diào)用記錄器的文件名 |
{line} | {file}中調(diào)用記錄器的行 |
{env:foo} | $ _ENV中'foo'的值 |
你可以使用任何自己喜歡的日志器,只要它繼承了 Psr\Log\LoggerInterface
并符合 PSR3 規(guī)范。 這意味著你可以使用任何符合PSR-3規(guī)范的日志器,或者造一個自己的。
你需要將第三方日志器放入 /app/Config/Autoload.php
配置文件中或者通過某個自動加載器,比如Composer,來保證第三方日志器在系統(tǒng)中可被找到。 接下來你需要修改 /app/Config/Services.php
,將 logger
的別名設(shè)置為新的日志器的類名。
現(xiàn)在開始,對 log_message()
的所有調(diào)用都會使用你自定義的日志器進(jìn)行日志記錄。
當(dāng)你需要將你的日志庫以框架不感知的形式調(diào)用時,你可以使用實現(xiàn)了 setLogger
方法的 CodeIgniter\Log\LoggerAwareTrait
。 從而當(dāng)在不同框架環(huán)境下使用日志庫時,你的日志器依舊可如同預(yù)期一般運行,只要它能找到一個符合PSR3的日志器。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: