如何禁用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应用程序中的日志级别";