systemsdk/easy-log-bundle

一个symfony扩展包,优化开发日志消息以便由人而非软件进行处理。

v2.0.1 2024-04-12 14:25 UTC

This package is auto-updated.

Last update: 2024-09-12 15:28:18 UTC


README

为symfony框架提供人性化的日志文件。这是由于EasyCorp/easy-log-handler已废弃且不再维护,因此对EasyCorp/easy-log-handler进行了修改。

MIT licensed Actions Status

源代码

描述

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

内容

  1. 特性
  2. 安装
  3. 配置和用法

特性

以下是一些EasyLogBundle的最佳特性以及它与默认的Symfony日志的比较。

更好的日志结构

Symfony日志文件是一大堆文本流。当你打开它们时,你很难判断一个请求何时开始或结束,哪些日志消息属于一组。

EasyLogBundle以不同的方式组织日志文件

structure-easylog

  • 它添加了一个大的标题和一些新行来分隔每个请求日志;
  • 如果请求不太重要(例如,Assetic请求),则标题更紧凑且显示的信息更少;
  • 日志消息在内部被分割,这样你就可以更好地理解它们的各个部分(请求、doctrine、security等)

更简洁的日志

首先,EasyLogBundle不会在每个日志消息中显示时间戳。在dev环境中,你不必关心这一点,所以时间戳只显示一次,针对每组日志消息。

一些日志消息包含的extra信息,用于添加更多关于日志的细节,仅在它不同于上一个日志时显示。相比之下,Symfony总是显示所有日志的extra,生成大量重复信息

在日志消息中使用占位符而不是实际值(例如,使用“Matched route "{route}"”而不是“Matched route "home"”)越来越流行。这对机器来说很好,因为它们可以按占位符值分组类似的消息。

然而,对人类来说,这个“特性”很烦人。这就是为什么EasyLogBundle会自动替换日志消息中包含的任何占位符。

更好的视觉层次结构

重要元素,如弃用和安全相关的消息,必须在日志文件中突出显示,以便您可以立即找到它们。然而,在Symfony中,所有日志看起来完全一样。您如何知道哪些是重要的?

动态变量内联

日志消息通常在其contextextra属性中包含相关变量。在日志文件中显示这些变量的内容,总是在可读性和简洁性之间寻找一个平衡。

EasyLogBundle根据每个日志消息动态决定如何内联这些变量。例如,Doctrine查询参数总是内联显示,但对于不重要请求,请求参数是内联的,而对于重要请求则是嵌套显示。

dynamic-inline-easylog

堆栈跟踪

当日志消息包含错误堆栈跟踪时,您肯定希望查看它们。然而,Symfony以内联方式显示堆栈跟踪,这使得无法进行检查。EasyLogBundle以正确的堆栈跟踪方式显示它们。

日志消息分组

在检查日志文件时,最令人沮丧的体验之一是出现大量重复或类似的连续消息。这会导致信息不足,并分散注意力。EasyLogBundle一次性处理所有日志消息,因此它会意识到存在类似的连续日志。

例如,这是显示三个连续缺失翻译消息的Symfony日志文件

translation-group-symfony

这是EasyLogBundle显示相同消息的方式

translation-group-easylog

对于“事件通知”消息,这种差异更为明显,通常会产生数十个连续消息

大多数日志处理程序分别处理每个日志消息。相比之下,EasyLogBundle的高级日志处理要求每个日志消息都意识到其他日志(例如合并类似的连续消息)。这意味着必须捕获并批量处理与请求相关的所有日志。

安装

  1. 如果您已安装easycorp/easy-log-handler,请将其卸载
$ composer remove easycorp/easy-log-handler

注意:请删除配置文件config/packages/easy_log_handler.yamlconfig/packages/dev/easy_log_handler.yamlconfig/packages/test/easy_log_handler.yaml等...

  1. 编辑您的config/packages/dev/monolog.yamlconfig/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处理程序配置已记录/排除的通道和日志消息的级别。

  1. 允许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']