我正在尝试在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
答案 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
时,它在我的应用程序中运行良好。