我已经将symlog配置为通过电子邮件发送错误,如symfony文档中所述:https : //symfony.com/doc/4.3/logging/monolog_email.html
与请求期间发生的所有错误提示以及控制台命令错误一起使用时效果很好。但是,它不会发送有关在处理Messenger消息期间发生的错误的电子邮件。
运行使用者时会显示错误,并且错误bin/console messenger:consume async -vv
也会显示在prod.log中,如下所示:[2020-01-10 12:52:38] messenger.CRITICAL: Error thrown while handling message...
感谢您提供有关如何设置独白以通过电子邮件发送Messenger错误的任何提示。
实际上,swift_mailer
使用SwiftMailerHandler的monolog类型还希望实现重置接口,并且默认情况下使用内存假脱机希望将所有电子邮件保留在缓冲区中,直到销毁为止,因此直到请求结束:
为了解决这个问题,您可以禁用memory
swiftmailer的默认假脱机设置。另一个解决方案是在WorkerMessageFailedEvent
事件触发后刷新您的电子邮件,您可以实现事件订阅者来执行此操作。
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
use Symfony\Component\Messenger\Event\WorkerMessageHandledEvent;
use Symfony\Contracts\Service\ResetInterface;
/**
* Class ServiceResetterSubscriber.
*/
class ServiceResetterSubscriber implements EventSubscriberInterface
{
protected ResetInterface $servicesResetter;
public function __construct(ResetInterface $servicesResetter)
{
$this->servicesResetter = $servicesResetter;
}
public function resetServices(): void
{
$this->servicesResetter->reset();
}
public static function getSubscribedEvents(): array
{
return [
WorkerMessageFailedEvent::class => ['resetServices', 10],
];
}
}
使用正确的参数注册您的服务:
App\EventSubscriber\ServiceResetterSubscriber:
arguments: ['@services_resetter']
顺便说一句,没有这个限制(没有缓冲区限制),您的应用程序将泄漏,并且永远不会发送电子邮件。
另一个技巧: 确保使消息实现\JsonSerializable
以在日志中获取消息内容,因为Messenger会直接使用他的独白,并且其上下文序列化程序希望使用json_encode进行序列化。这就是为什么在使用json_encode进行编码时需要自定义其JSON表示形式的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句