gpt4 book ai didi

email - Symfony 信使 : Send logged messenger errors per email (via swift_mailer)?

转载 作者:行者123 更新时间:2023-12-04 11:41:06 25 4
gpt4 key购买 nike

我已经将 monolog 配置为通过电子邮件发送错误,如 symfony 文档中所述:https://symfony.com/doc/4.3/logging/monolog_email.html

适用于请求期间发生的所有错误以及控制台命令错误。
但它不会为在处理信使消息期间发生的错误发送电子邮件。

运行消费者时显示错误bin/console messenger:consume async -vv它们也会像这样显示在 prod.log 中:[2020-01-10 12:52:38] messenger.CRITICAL: Error thrown while handling message...
感谢您提供有关如何设置 monolog 以通过电子邮件发送信使错误的任何提示。

最佳答案

事实上独白swift_mailer类型用途 SwiftMailerHandler
Wish 还实现了 reset 接口(interface)并默认使用 memory spool 将所有电子邮件保留在缓冲区中,直到它被破坏,直到请求结束:

  • onKernelTerminate
  • onCliTerminate
  • 或者直到调用 reset 方法,这意味着对于 Messenger worker 来说,不会发送任何电子邮件,因为没有即时刷新 - 所有这些都将保存在内存缓冲区中,如果进程被终止,可能会丢失。

  • 要解决此问题,您只需禁用默认的线轴 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 直接使用他的 monolog 并且它的上下文序列化程序希望使用 json_encode 进行序列化。
    这就是为什么我们需要在使用 json_encode 完成编码时自定义它们的 JSON 表示。

    关于email - Symfony 信使 : Send logged messenger errors per email (via swift_mailer)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59684488/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com