Symfony 日誌檔案在所有環境中都以相同的方式格式化。這意味著dev.log
針對機器而不是人類進行了優化。結果是日誌檔案充滿了無用的信息,從而降低了您的工作效率。
EasyLogHandler是一個新的 Monolog 處理程序,可建立人性化的日誌檔案。經過最佳化,日誌資訊顯示清晰簡潔。在開發環境中使用它可以成為更有生產力的開發人員。
特徵
安裝
配置與使用
這些是EasyLogHandler的一些最佳功能以及它與預設 Symfony 日誌的比較。
Symfony 日誌檔案是一個龐大的文字流。當您打開它們時,您無法輕鬆判斷請求何時開始或完成以及哪些日誌訊息屬於同一組:
交響樂團 | 易日誌處理程序 |
---|---|
EasyLogHandler 以不同的方式建立日誌檔案:
它添加了一個大標頭和一些新行來分隔每個請求日誌;
如果請求不太重要(例如 Assetic 請求),標頭會更緊湊並顯示更少的資訊;
日誌訊息在內部進行劃分,以便您可以更好地理解它們的不同部分(請求、原則、安全性等)
首先,EasyLogHandler 不會在每個日誌訊息中顯示時間戳記。在dev
環境中,您不應該關心這一點,因此每組日誌訊息的時間戳記僅顯示一次。
交響樂團 | 易日誌處理程序 |
---|---|
只有與先前的日誌不同時,才會顯示一些日誌訊息中包含的extra
信息,以添加有關該日誌的更多詳細資訊。相較之下,Symfony 總是顯示所有日誌的extra
,產生大量重複資訊:
交響樂團 |
---|
易日誌處理程序 |
---|
在日誌訊息中使用佔位符而不是實際值變得越來越流行(例如, Matched route "{route}".
而不是Matched route "home".
)這對於機器來說非常有用,因為它們可以對僅在以下方面有所不同的類似訊息進行分組:佔位符值。
然而,對人類來說,這個「特徵」卻令人不安。這就是 EasyLogHandler 自動替換日誌訊息中包含的任何占位符的原因:
交響樂團 |
---|
易日誌處理程序 |
---|
重要元素(例如棄用和安全相關訊息)必須在日誌檔案中突出顯示,以幫助您立即發現它們。然而,在 Symfony 中,所有日誌看起來都完全相同。你怎麼知道哪些是重要的?
交響樂團 |
---|
(所有訊息看起來都完全相同) |
易日誌處理程序 |
---|
(棄用、警告、錯誤和安全訊息很突出) |
日誌訊息通常包含context
中的相關變數和extra
屬性。在日誌檔案中顯示這些變數的內容始終是可讀性和簡潔性之間的艱難平衡。
EasyLogHandler 根據每個日誌訊息決定如何動態內聯這些變數。例如,Doctrine 查詢參數始終是內聯的,但請求參數對於不重要的請求是內聯的,對於重要的請求是嵌套的:
當日誌訊息包含錯誤堆疊追蹤時,您肯定想查看它們。然而,Symfony 顯示內聯的堆疊跟踪,使得它們無法檢查。 EasyLogHandler 將它們顯示為正確的堆疊追蹤:
交響樂團 |
---|
易日誌處理程序 |
---|
檢查日誌檔案時最令人沮喪的經歷之一是有大量重複或類似的連續訊息。它們提供的資訊很少,而且只會分散您的注意力。 EasyLogHandler 一次處理所有日誌訊息,而不是逐條處理,因此它可以感知是否存在類似的連續日誌。
例如,這是一個 Symfony 日誌文件,顯示三個連續缺少的翻譯訊息:
EasyLogHandler 顯示相同訊息的方式如下:
對於「事件通知」訊息來說,差異更為明顯,它通常會產生數十條連續訊息:
交響樂團 |
---|
易日誌處理程序 |
---|
該專案作為 PHP 套件而不是 Symfony 套件分發,因此您只需使用 Composer 來引用該專案:
$composer require --dev easycorp/easy-log-handler
在您的應用程式中為此日誌處理程序定義一個新服務:
較新的 Symfony 版本:
# config/packages/dev/easy_log_handler.yamlservices:EasyCorpEasyLogEasyLogHandler:public: falsearguments: ['%kernel.logs_dir%/%kernel.environment%.log']
較舊的 Symfony 版本:
# app/config/services.ymlservices:# ...easycorp.easylog.handler:class: EasyCorpEasyLogEasyLogHandlerpublic: falsearguments: - '%kernel.logs_dir%/%kernel.environment%.log'
更新dev
環境中的 Monolog 配置,以定義包裝此新處理程序服務的緩衝處理程序(請繼續閱讀以了解原因)。您可以安全地複製+貼上此配置:
較新的 Symfony 版本:
# config/packages/dev/monolog.yamlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ['!event']level: debugeasylog:type: serviceid: EasyCorpEasyLogEasyLogHandler
較舊的 Symfony 版本:
# app/config/config_dev.ymlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ["!event"]level: debugeasylog:type: serviceid: easycorp.easylog.handler
大多數日誌處理程序單獨處理每個日誌訊息。相較之下,EasyLogHandler 高階日誌處理要求每個日誌訊息了解其他日誌(例如合併相似的連續訊息)。這意味著必須捕獲並批量處理與請求關聯的所有日誌。
在上面的配置中, buffered
處理程序保存所有日誌訊息,然後將它們傳遞給 EasyLog 處理程序,該處理程序一次處理所有訊息並將結果寫入日誌檔案。
使用buffered
處理程序來配置記錄/排除的通道以及正在記錄的訊息的層級。