在 symfony 中记录致命错误

Posted

技术标签:

【中文标题】在 symfony 中记录致命错误【英文标题】:Log Fatal errors in symfony 【发布时间】:2014-11-17 13:12:48 【问题描述】:

我正在尝试在 Symfony 中配置电子邮件日志记录。我关注了the cookbook,它可以工作,但我遇到了致命错误的问题。

在 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

【问题讨论】:

您可能会将关键更改为错误,因为您将给您 400x 消息以及 500x 消息。但是@Yann Eugone 是正确的,一个致命的错误会关闭一切,抓住这些真的不切实际。当然,如果您在生产中遇到致命错误,则意味着您的测试方法需要改进。 @Cerad 4xx 不是问题。即使有人使用 ipad 访问页面(该工具没有为此优化)并且它要求它是 apple-touch-icon,它们也会发生,所以我不在乎那些。我也知道在生产中永远不应该发生致命错误,但如果真的发生了……我想知道! 【参考方案1】:

记录 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

【讨论】:

【参考方案2】:

您使用的是哪个 Symfony 版本?

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

【讨论】:

我有多个 symfony 实例。最老的是2.1。我会看看它是否适用于新版本。【参考方案3】:

我遇到了同样的问题(在生产中登录了致命错误,但未发送电子邮件),我设法使它工作添加到我的 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,它在我的应用程序中运行良好。

【讨论】:

以上是关于在 symfony 中记录致命错误的主要内容,如果未能解决你的问题,请参考以下文章

删除捆绑包后的 symfony 致命错误

Symfony 2 Assetic 致命错误:在资产转储中找不到类“Assetic\Util\PathUtils”

Symfony 5 缓存:清除 php.CRITICAL:致命错误:允许的内存大小

PHP 致命错误:未捕获的异常“Symfony\Component\Yaml\Exception\ParseException”

php symfony 致命错误

lumen.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: 致命错误:调用未定义函数 App\Http\Controller