日誌介面規範
本文制定了日誌類別庫的通用介面規格。 本規範的主要目的,是為了讓日誌類別庫以簡單通用的方式,透過接收一個 PsrLogLoggerInterface 對象,來記錄日誌資訊。 關鍵字「必須」("MUST")、「一定不可/一定不能」("MUST NOT")、「需要」("REQUIRED")、 本文中的 實作者 指的是實作了 LoggerInterface 介面的類別庫或框架,反過來講,他們就是 LoggerInterface 的 使用者。 規範說明 1.1 基本規範 LoggerInterface 介面對外定義了八個方法,分別用來記錄 [RFC 5424][] 中定義的八個等級的日誌:debug、 info、 notice、 warning、 error、 critical、 alert 以及 emergency 。 第九個方法 —— log,其第一個參數為記錄的等級。可使用一個預先定義的等級常數作為參數來呼叫此方法,必須與直接呼叫以上八個方法具有相同的效果。如果傳入的等級常數參數沒有預先定義,則必須拋出 PsrLogInvalidArgumentException 類型的例外。在不確定的情況下,使用者不該使用未支援的等級常數來呼叫此方法。 1.2 記錄資訊以上每個方法都接受一個字串類型或是有__toString() 方法的物件作為記錄資訊參數,這樣,實作者就能把它當成字串來處理,否則實作者必須自己把它轉換成字串。 記錄資訊參數可以攜帶佔位符,實現者可以根據上下文將其它替換成對應的值。 其中佔位符必須與上下文數組中的鍵名保持一致。 佔位符的名稱必須由一個左花括號 { 以及一個右括號 } 包含。但花括號與名稱之間一定不能有空格符。 佔位符的名稱應該只由 A-Z、 a-z,0-9、下劃線 _、以及英文的句號 .組成,其它字符作為將來佔位符規範的保留。 實作者可以透過對佔位符採取不同的轉義和轉換策略,來產生最終的日誌。 以下是一個佔位符使用的例子:
每個記錄函數都接受一個上下文陣列參數,用來裝載字串類型無法表示的資訊。它可以裝載任何信息,所以實現者必須確保能正確處理其裝載的信息,對於其裝載的數據,一定不能 拋出異常,或產生PHP出錯、警告或提醒訊息(error、warning、notice)。 如需透過上下文參數傳入了一個 Exception 對象, 必須以 'exception' 作為鍵名。 PsrLogAbstractLogger 類別使得只需繼承它和實現其中的 log 方法,就能夠很輕易地實現 LoggerInterface 接口,而另外八個方法就能夠把記錄資訊和上下文資訊傳給它。 同樣地,使用 PsrLogLoggerTrait 也只需實作其中的 log 方法。不過,要特別注意的是,在traits可重複使用程式碼區塊還不能實作介面前,還需要 implement LoggerInterface。 在沒有可用的日誌記錄器時, PsrLogNullLogger 介面可以為使用者提供一個備用的日誌「黑洞」。不過,當上下文的建置非常消耗資源時,帶條件檢查的日誌記錄或許是更好的方法。 PsrLogLoggerAwareInterface 介面僅包含一個 PsrLogLoggerAwareTrait trait可重複使用程式碼區塊可以在任何的類別裡面使用,只需透過它提供的 $this->logger,就可以輕鬆實現等同的介面。 PsrLogLogLevel 類別裝載了八個記錄等級常數。 包 上述的介面、類別和相關的異常類,以及一系列的實作偵測文件,都包含在 psr/log 文件包中。 PsrLogLoggerInterface
} 複製程式碼 public function setLogger(LoggerInterface $logger);
} 複製程式碼🎜> const DEBUG = 'debug';
} |