6

我正在尝试在 Symfony 中配置电子邮件日志记录。我按照食谱进行操作,它可以工作,但我遇到了致命错误的问题。

这些错误未在 prod 模式下记录。我发现当我添加Debug::enable();到 app.php 时,会记录错误,但是我仍然没有收到电子邮件。

下面是相关配置:

    mail:
        type:         fingers_crossed
        action_level: critical
        handler:      buffer
    buffer:
        type: buffer
        handler: swift
    swift:
        type:       swift_mailer
        from_email: %error_mail_from%
        to_email:   %error_mail_to%
        subject:    %error_mail_subject%
        level:      debug
4

3 回答 3

2

记录 PHP 致命错误并不是一件容易的事,因为每当抛出错误时,PHP 就会关闭......但是,有一个函数可以用来在进程关闭之前做一些小事情:register_shutdown_function

看看如何捕获 PHP 致命错误

这就是 Symfony 的Debug::enable();做法。看看https://github.com/symfony/Debug/blob/master/ErrorHandler.php#L118

于 2014-09-23T11:29:00.470 回答
1

您使用的是哪个 Symfony 版本?

似乎从 2.3 开始,有一个很好的改进可以让你做到这一点(记录致命错误)。看看这个:https ://github.com/symfony/symfony/pull/6474

于 2014-11-03T20:11:28.490 回答
0

我有同样的问题(致命错误登录生产但未发送电子邮件),我设法使它工作添加到我的 config_prod.php :

services:
  mydebug.debug_handlers_listener:
              class: Symfony\Component\HttpKernel\EventListener\DebugHandlersListener
              arguments:
                  - { 0:"@http_kernel", 1:'terminateWithException'}
              tags:
                   - { name: kernel.event_subscriber }

我发现这样的服务是定义在\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Resources\config\debug.xml而不是在debug_prod.xml.

通过回调terminateWithException它在我的应用程序中工作正常。

于 2015-03-08T18:15:05.883 回答