如何关闭Symfony Messenger组件的日志记录

问题描述

我有一个Symfony网站,该网站介于实际的实现和登台之间(我的特殊客户使用该网站)。日志在该服务器上保持打开状态,因为这有助于在不时发生错误时(它们经常以非显而易见的,非错误/异常的方式出错)。大多数记录的行都是通过Doctrine-执行的查询,这对我来说非常有用,但是我确实手动禁用了一些庞大,重复和经过测试的操作的某些记录,这些操作向数百个查询发送了垃圾邮件,以使日志更易于浏览,如果需要的话。

我的问题是:如何禁用从Symfony Messenger组件内部完成的日志记录?具体来说,日志是由理论传输完成的(我使用的是日志传输),它每秒以以下几行向我的日志发送垃圾邮件(乘以我运行的受监视进程的数量):

[2020-08-24 14:19:25] doctrine.DEBUG: "START TRANSACTION" [] []
[2020-08-24 14:19:25] doctrine.DEBUG: SELECT m.* FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) ORDER BY available_at ASC LIMIT 1 FOR UPDATE ["2020-08-24 13:19:25","2020-08-24 14:19:25","default"] []
[2020-08-24 14:19:25] doctrine.DEBUG: "COMMIT" [] []

由于这些消息是由教义生成的,因此我无法通过日志记录渠道将其过滤掉-因为这将禁用所有教义的日志消息,这不是我想要的。我也不想将日志记录级别提高到高于DEBUG的水平。我只想从日志中删除这些特定消息。

解决方法

我只是想解决这个问题,我发现大多数垃圾邮件可以通过使用finger_crossed monolog 处理程序而不是默认处理程序来避免。此快速解决方案可避免完全禁用 Doctrine 日志。

packages/dev/monolog.yaml中,替换

main:
    type: stream
    path: "%kernel.logs_dir%/%kernel.environment%.log"
    level: debug
    channels: ["!event"]

作者:

main:
    type: fingers_crossed
    action_level: info
    handler: nested
    channels: ["!event"]
nested:
    type: stream
    path: "%kernel.logs_dir%/%kernel.environment%.log"
    level: debug
    channels: ["!event"]
,

您有很多选择。

排除Messenger日志信息: Disable Symfony Messenger log info

在其他文件中记录您的消息:

您可以将消息记录到其他文件。就像Symfony documentation的本部分中所述。

配置记录器级别:

您可以使用级别信息配置记录器条目,这可以帮助您拥有与想要查看的记录相对应的日志文件。例如,您可以使用ERROR级来仅在您的消息中出现错误。

查看Loggin component下面的文档。

创建自己的频道:

您可以创建并订阅自己的频道,但不包括doctrineCreating your own channel

只需使用grep搜索所需内容:

如果您想进一步过滤读取日志文件时要查看的内容,可以使用grep,例如:

tail path/to/my/logfile.txt | grep 'want I want to see'

这使我们能够避免使用无用的行。 grep man page