Symfony 从独白中排除所有404错误

Symfony 从独白中排除所有404错误,symfony,http-status-code-404,monolog,Symfony,Http Status Code 404,Monolog,目前我有独白给我发送电子邮件时,有错误。我发现404个错误污染了我的电子邮件,我的提供商因为我自己发送的电子邮件数量太多而暂停了我的帐户。我决定排除所有404错误,因为所有这些错误都是由于机器人程序寻找漏洞造成的,而不是来自客户端 排除代码: 排除的\u 404: -^/ 我现在看到的问题是,如果机器人程序使用GET以外的http方法,symfony仍然会记录404个错误。我的电子邮件现在被以下条目污染了 HEAD:80/phpmyAdmin/ 如何排除所有404错误,包括使用http方法而不是

目前我有独白给我发送电子邮件时,有错误。我发现404个错误污染了我的电子邮件,我的提供商因为我自己发送的电子邮件数量太多而暂停了我的帐户。我决定排除所有404错误,因为所有这些错误都是由于机器人程序寻找漏洞造成的,而不是来自客户端

排除代码:

排除的\u 404:
-^/

我现在看到的问题是,如果机器人程序使用GET以外的http方法,symfony仍然会记录404个错误。我的电子邮件现在被以下条目污染了

HEAD:80/phpmyAdmin/

如何排除所有404错误,包括使用http方法而不是GET的错误

编辑:
哦,孩子。这里是初学者的错误。似乎在我最后一次部署配置之后,我没有清除prod缓存,我发现配置是缓存的。我正在使用deployer部署代码更新,但我猜其中缺少clear cache命令。

Symfony 4.1。upwords可以配置为忽略HTTP代码:

config/packages/monolog.yaml
我知道这是一个老问题,但这是谷歌搜索时的第一个问题。 同时,我为symfony 3.4找到了一个解决方案,如果您需要从日志中排除所有404错误,您可以创建一个ExceptionListener并检查该异常是否为NotFoundHttpException。 如果是这种情况,那么只需返回一个响应,这样事件就会停止,记录器就不会处理异常

src/AppBundle/EventListener/ExceptionListener.php

namespace AppBundle\EventListener;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class ExceptionListener
{
    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $exception = $event->getException();
        if (! $exception instanceof NotFoundHttpException) {
            return;
        }
        $response = new Response($exception->getMessage(), $exception->getStatusCode());
        // returning a response stop the event propagation
        $event->setResponse($response);
    }
}
src/AppBundle/Resources/config/services.yml

services:
  app.exception.listener:
    class: AppBundle\EventListener\ExceptionListener
    tags:
      - { name: kernel.event_listener, event: kernel.exception }

在Symfony 4/5中,您可以执行以下操作:

<?php

declare(strict_types=1);

namespace App\EventListener;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class ExceptionListener
{
    public function onKernelException(ExceptionEvent $event)
    {
        $exception = $event->getThrowable();
        if ($exception instanceof NotFoundHttpException) {
            $response = new Response($exception->getMessage(), $exception->getStatusCode());
            $event->setResponse($response);
        }

        return;
    }
}

你在这样做吗?更新了我的问题以包括排除404的设置。按预期排除所有GET 404。但其他http方法仍会被记录。不确定这是否是错误,将尝试重新生成它。。您可以使用不同的日志记录级别,即使用错误而不是调试。非常感谢。我用的是symfony2.8。我想我可能需要用内核异常listenerWell手动处理这些错误,我不好意思说我错了。似乎我从生产部门收到了所有404的电子邮件,但在dev中,配置工作正常。我想还有更多的测试。
<?php

declare(strict_types=1);

namespace App\EventListener;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class ExceptionListener
{
    public function onKernelException(ExceptionEvent $event)
    {
        $exception = $event->getThrowable();
        if ($exception instanceof NotFoundHttpException) {
            $response = new Response($exception->getMessage(), $exception->getStatusCode());
            $event->setResponse($response);
        }

        return;
    }
}
App\EventListener\ExceptionListener:
    tags:
        - { name: kernel.event_listener, event: kernel.exception }