可以动态更改发送到 Monolog 的每个日志的日志级别。
要将 Symfony Messenger 的日志从当前的INFO 更改为例如DEBUG,您必须创建一个独白处理器。
该过程与 How to Add extra Data to Log Messages via a Processor 中的 Symfony 文档中解释的非常相似。
你必须像这样创建一个类:
<?php
namespace App\Monolog;
use Monolog\Logger;
use Monolog\Processor\ProcessorInterface;
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:
App\Monolog\MessengerInfoToDebugLogLevel:
tags:
- { name: monolog.processor }
现在messenger 的所有日志都降级为DEBUG 日志。
同样可以使用 Symfony HttpClient 来降级其日志消息(也位于 INFO):
<?php
namespace App\Monolog;
use Monolog\Logger;
use Monolog\Processor\ProcessorInterface;
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:
App\Monolog\HttpClientInfoToDebugLogLevel:
tags:
- { name: monolog.processor }
此解决方案的灵感来自于 Matthias Noback 的“Dynamically changing the log level in Symfony apps”