记录symfony中的致命错误

时间:2014-09-23 10:52:45

标签: symfony logging monolog

我正在尝试在Symfony中配置电子邮件日志记录。我跟着the cookbook并且它有效,但我遇到致命错误的问题。

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

以下是相关配置:

    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

3 个答案:

答案 0 :(得分:2)

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

查看How do I catch a PHP Fatal Error

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

答案 1 :(得分:1)

您使用的是哪个Symfony版本?

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

答案 2 :(得分: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时,它在我的应用程序中运行良好。