【问题标题】:Log Fatal errors in symfony在 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,它们也会发生,所以我不在乎那些。我也知道在生产中永远不应该发生致命错误,但如果真的发生了……我想知道!

标签: symfony logging monolog


【解决方案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,它在我的应用程序中运行良好。

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      相关资源
      最近更新 更多