2

我有一个 Symfony 网站,它介于实际实现和登台之间(我的一个特殊客户使用它)。该服务器上的日志记录保持打开状态,因为这有助于在不时出现问题时提供帮助(并且它们经常以非明显、非错误/异常的方式出错)。大多数记录的行都是由 Doctrine 执行的查询,这对我来说非常有用,但是我确实手动禁用了一些巨大的、重复的和经过良好测试的操作的日志记录,这些操作会发送数百个查询,以使日志更易于导航, 如果需要的话。

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

[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 的级别。我只想从日志中删除这些特定消息。

4

2 回答 2

1

我只是想解决这个问题,我发现大多数垃圾邮件可以通过使用 Fingers_crossed 独白处理程序而不是默认处理程序来避免。这种快速解决方案避免完全禁用 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"]
于 2021-02-08T11:15:50.480 回答
0

你有很多选择。

排除 Messenger 日志信息: 禁用 Symfony Messenger 日志信息

将您的消息记录在不同的文件中:

您可以将消息记录到不同的文件。就像在Symfony 文档的这一部分中描述的一样。

配置记录器级别:

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

检查Loggin 组件下面的文档。

创建自己的频道:

您可以创建自己的频道并订阅它,不包括doctrine. 创建自己的频道

只需搜索您想要的内容grep

如果你想在阅读日志文件时过滤更多你想看到的内容,你可以使用grep如下:

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

这使我们能够避免无用的行。grep 手册页

于 2020-08-24T16:19:31.923 回答