【问题标题】:Symfony2 logging 404 errorsSymfony2 记录 404 错误
【发布时间】:2023-09-08 05:47:01
【问题描述】:

当发生 404 错误时,我需要能够记录/接收电子邮件。我可以在文档中看到如何为这些错误设置一个新模板,但我如何首先在我的控制器中捕获它们,以便我可以实现日志记录/电子邮件逻辑?

【问题讨论】:

    标签: http-status-code-404 symfony


    【解决方案1】:

    也许添加一个监听 kernel.exception 事件的事件监听器可以做到吗? 查看http://symfony.com/doc/current/book/internals.html#kernel-exception-eventhttp://symfony.com/doc/current/reference/dic_tags.html#dic-tags-kernel-event-listener

    一个小例子:

    1) 创建自定义监听器

    //bundles/Acme/AcmeBundle/Listener/CustomListener.php
    
    namespace Acme\AcmeBundle\Listener;
    use Symfony\Component\EventDispatcher\Event;
    
    public class CustomListener {
        public function onKernelException(Event $event) {
            //Get hold of the exception
            $exception = $event->getException();
            //Do the logging
            // ...
        }
    }
    

    2) 将监听器添加到您的配置中

    //config.yml
    services:
        kernel.listener.your_listener_name:
            class: Acme\AcmeBundle\Listener\CustomListener
            tags:
                - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
    

    要获取日志或邮件 (Swiftmailer) 服务,您可以考虑将它们注入到侦听器中 (http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services)

    【讨论】:

    • 这是我最终要走的路线。现在我只需要弄清楚服务注入部分。我使用 GetResponseForExceptionEvent 作为具体的事件类型 - 这是正确的使用吗?
    • GetResponseForExceptionEvent 是您必须用于异常的那个。我是否可以建议检查错误是否为404?否则 all 异常将被邮寄给您(如果需要,您可以使用 Monolog 配置)。