如何在Symfony Messenger的中间件上禁用日志"info"?



如何禁用Symfony Messenger组件的SendMessageMiddleware发送的INFO类型的日志?

symfony/messanger/Middleware/SendMessageMiddleware.php:

$this->logger->info('Received message {class}', $context);

https://github.com/symfony/messenger/blob/9c036a45bcf837dc38f0db93095a45a21096dd63/Middleware/SendMessageMiddleware.php#L57

我这样解决了我的问题:

monolog.yaml:

...
channels: ["!messenger"]
...

可以动态更改发送到Monolog的每个日志的日志级别。

要将Symfony Messenger的日志图例从当前的INFO更改为例如DEBUG,您必须创建一个Monolog Processor。

该过程与Symfony文档中"如何通过处理器向日志消息添加额外数据"中所解释的过程非常相似。

你必须创建这样一个类:

<?php
namespace AppMonolog;
use MonologLogger;
use MonologProcessorProcessorInterface;
class MessengerInfoToDebugLogLevel implements ProcessorInterface
{
public function __invoke(array $record): array
{
$channel = $record['channel'] ?? null;
if (null === $channel) {
return $record;
}
if ('messenger' !== $channel) {
return $record;
}
$record['level'] = Logger::DEBUG;
$record['level_name'] = Logger::getLevelName(Logger::DEBUG);
return $record;
}
}

然后将其注册为服务,并使用monolog.processor:进行标记

# I put it here, but you can put it where you like most
# config/packages/dev/messenger.yaml
services:
AppMonologMessengerInfoToDebugLogLevel:
tags:
- { name: monolog.processor }

现在,来自messenger的所有日志都降级为DEBUG日志。

Symfony HttpClient也可以这样做,以降级其日志消息(也在INFO(:

<?php
namespace AppMonolog;
use MonologLogger;
use MonologProcessorProcessorInterface;
class HttpClientInfoToDebugLogLevel implements ProcessorInterface
{
public function __invoke(array $record): array
{
$channel = $record['channel'] ?? null;
if (null === $channel) {
return $record;
}
if ('http_client' !== $channel) {
return $record;
}
$record['level'] = Logger::DEBUG;
$record['level_name'] = Logger::getLevelName(Logger::DEBUG);
return $record;
}
}

然后将其注册为服务,并使用monolog.processor:进行标记

# I put it here, but you can put it where you like most
# config/packages/dev/http_client.yaml
services:
AppMonologHttpClientInfoToDebugLogLevel:
tags:
- { name: monolog.processor }

这个解决方案的灵感来自Matthias Noback的";动态地改变Symfony应用程序中的日志级别";

最新更新