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
处理程序来配置记录/排除的通道以及正在记录的消息的级别。