我有一个带有用于错误报告的独白的项目设置。下面的代码是如何设置的示例。
$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 中时确实可以工作。
所以我弄清楚了,功能代码如下:
$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 的顺序很重要!