systemsdk /easy-log-bundle
一个symfony扩展包,优化开发日志消息以便由人而非软件进行处理。
Requires
- php: >=8.1
- monolog/monolog: ~3.0
- symfony/framework-bundle: ^6.1|^7.0
- symfony/yaml: ^6.1|^7.0
Conflicts
README
为symfony框架提供人性化的日志文件。这是由于EasyCorp/easy-log-handler已废弃且不再维护,因此对EasyCorp/easy-log-handler进行了修改。
描述
Symfony日志文件在所有环境中都以相同的方式格式化。这意味着dev.log
是为了机器而不是人优化的。结果是日志文件充满了无用信息,这会降低你的工作效率。
此扩展包是一个新的Monolog处理器,用于创建人性化的日志文件。它经过优化,以清晰简洁的方式显示日志信息。在开发环境中使用它,可以成为更高效的开发者。
EasyLogBundle版本2或更高版本的要求
- PHP 8.1或更高版本
- Symfony 6.1或更高版本
- Monolog扩展包 3.0或更高版本
EasyLogBundle版本1的要求
- PHP 7.4或更高版本
- Symfony 4.4或更高版本
- Monolog扩展包 1.6或更高版本,至2.X
内容
特性
以下是一些EasyLogBundle的最佳特性以及它与默认的Symfony日志的比较。
更好的日志结构
Symfony日志文件是一大堆文本流。当你打开它们时,你很难判断一个请求何时开始或结束,哪些日志消息属于一组。
EasyLogBundle以不同的方式组织日志文件
- 它添加了一个大的标题和一些新行来分隔每个请求日志;
- 如果请求不太重要(例如,Assetic请求),则标题更紧凑且显示的信息更少;
- 日志消息在内部被分割,这样你就可以更好地理解它们的各个部分(请求、doctrine、security等)
更简洁的日志
首先,EasyLogBundle不会在每个日志消息中显示时间戳。在dev
环境中,你不必关心这一点,所以时间戳只显示一次,针对每组日志消息。
一些日志消息包含的extra
信息,用于添加更多关于日志的细节,仅在它不同于上一个日志时显示。相比之下,Symfony总是显示所有日志的extra
,生成大量重复信息
在日志消息中使用占位符而不是实际值(例如,使用“Matched route "{route}"”而不是“Matched route "home"”)越来越流行。这对机器来说很好,因为它们可以按占位符值分组类似的消息。
然而,对人类来说,这个“特性”很烦人。这就是为什么EasyLogBundle会自动替换日志消息中包含的任何占位符。
更好的视觉层次结构
重要元素,如弃用和安全相关的消息,必须在日志文件中突出显示,以便您可以立即找到它们。然而,在Symfony中,所有日志看起来完全一样。您如何知道哪些是重要的?
动态变量内联
日志消息通常在其context
和extra
属性中包含相关变量。在日志文件中显示这些变量的内容,总是在可读性和简洁性之间寻找一个平衡。
EasyLogBundle根据每个日志消息动态决定如何内联这些变量。例如,Doctrine查询参数总是内联显示,但对于不重要请求,请求参数是内联的,而对于重要请求则是嵌套显示。
堆栈跟踪
当日志消息包含错误堆栈跟踪时,您肯定希望查看它们。然而,Symfony以内联方式显示堆栈跟踪,这使得无法进行检查。EasyLogBundle以正确的堆栈跟踪方式显示它们。
日志消息分组
在检查日志文件时,最令人沮丧的体验之一是出现大量重复或类似的连续消息。这会导致信息不足,并分散注意力。EasyLogBundle一次性处理所有日志消息,因此它会意识到存在类似的连续日志。
例如,这是显示三个连续缺失翻译消息的Symfony日志文件
这是EasyLogBundle显示相同消息的方式
对于“事件通知”消息,这种差异更为明显,通常会产生数十个连续消息
大多数日志处理程序分别处理每个日志消息。相比之下,EasyLogBundle的高级日志处理要求每个日志消息都意识到其他日志(例如合并类似的连续消息)。这意味着必须捕获并批量处理与请求相关的所有日志。
安装
- 如果您已安装
easycorp/easy-log-handler
,请将其卸载
$ composer remove easycorp/easy-log-handler
注意:请删除配置文件config/packages/easy_log_handler.yaml
、config/packages/dev/easy_log_handler.yaml
、config/packages/test/easy_log_handler.yaml
等...
- 编辑您的
config/packages/dev/monolog.yaml
和config/packages/test/monolog.yaml
并放置以下配置
monolog: handlers: buffered: type: buffer handler: easylog level: debug channels: ['!event'] easylog: type: service id: easy_log.handler
在上面的配置中,buffered
处理程序保存所有日志消息,然后将它们传递给EasyLog包进行处理,该包一次性处理所有消息并在日志文件中写入结果。使用buffered
处理程序配置已记录/排除的通道和日志消息的级别。
- 允许Flex使用contrib配方并安装以下symfony包
$ composer config extra.symfony.allow-contrib true $ composer require --dev systemsdk/easy-log-bundle:*
配置和用法
您可以通过编辑以下配置文件来更改应用程序的默认配置
# config/packages/dev/systemsdk_easy_log.yaml easy_log: log_path: '%kernel.logs_dir%/%kernel.environment%-readable.log' max_line_length: 120 prefix_length: 2 ignored_routes: ['_wdt', '_profiler']