Seldaek/monolog NativeMailerHandler 无法与 DeduplicationHandler 一起使用

问题描述 投票:0回答:1

我有一个带有用于错误报告的独白的项目设置。下面的代码是如何设置的示例。

$streamHandler = new StreamHandler(
    "$_ENV[ROOT_DIR]/logs/app.log",
    Level::Debug
);
$streamHandler->setFormatter(new LineFormatter(null, "y:m:d h:i:s", true));

$mailHandler = new NativeMailerHandler(
    $_ENV['ERROR_NOTIFICATION_EMAIL'],
    'Error from My Site',
    'no-reply@mydomain',
    Level::Error
);

$handlers = [
    new DeduplicationHandler($streamHandler),
    new DeduplicationHandler($mailHandler)
];

$processors = [
    new UidProcessor(),
    new IpProcessor(),
    new WebProcessor(),
];
$logger = new Logger('app', $handlers, $processors);

我使用的是自定义设置而不是 symphony,问题是在此设置中,mailHandler 从不发送任何电子邮件。重复数据删除非常适合流处理程序,但不适用于邮件处理程序。我在网上看到的使用其他邮件程序(如 swift_mailer)的其他设置似乎都是以这种方式配置的,所以我不确定为什么这不起作用。

只需添加一些说明,mailHandler 在未包装在 DeduplicationHandler 中时确实可以工作。

php email handler monolog
1个回答
0
投票

所以我弄清楚了,功能代码如下:

$streamHandler = new StreamHandler(
    "$_ENV[ROOT_DIR]/logs/app.log",
    Level::Debug
);
$streamHandler->setFormatter(new LineFormatter(null, "y:m:d h:i:s", true));

$mailHandler = new NativeMailerHandler(
    $_ENV['ERROR_NOTIFICATION_EMAIL'],
    'Error from My Site',
    'no-reply@mydomain',
    Level::Error
);

$groupedHandlers = new GroupHandler([
    $streamHandler,
    $mailHandler
]);

$deduplicatedHandler = new DeduplicationHandler($groupedHandlers);

$processors = [
    new UidProcessor(),
    new IpProcessor(),
    new WebProcessor(),
];
$logger = new Logger('app', [$deduplicatedHandler], $processors);

该问题是由两个重复数据删除处理程序引起的。也许这是 Monolog 的预期行为,但我没有意识到。解决方案是在删除重复数据之前对处理程序进行分组。

希望这对遇到相同或类似问题的人有所帮助,Monolog 的顺序很重要!

© www.soinside.com 2019 - 2024. All rights reserved.