从monolog

时间:2017-02-19 13:04:10

标签: symfony http-status-code-404 monolog

目前我有monolog在发生错误时向我发送电子邮件。我发现404错误只是污染了我的电子邮件,而我的提供商由于我自己发送的电子邮件数量而最终暂停我的帐户。我决定排除所有404错误,因为所有错误都是由于机器人正在寻找漏洞,而不是来自客户端。

排除代码:

excluded_404s: - ^/

我现在看到的问题是,如果机器人使用除GET之外的http方法,symfony仍会记录404错误。我的电子邮件现在被

等条目污染了

HEAD :80/phpmyAdmin/

如何排除所有404错误,包括使用除GET以外的http方法的错误?

编辑: 好家伙。初学者错了。似乎在我上次部署配置后,我没有清除prod缓存,我发现配置已缓存。我正在使用部署程序来部署我的代码更新,但我想它中缺少清除缓存命令。

3 个答案:

答案 0 :(得分:1)

我知道这是一个古老的问题,但在谷歌搜索时是第一个问题。 同时,我找到了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 }

答案 1 :(得分:0)

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

config / packages / monolog.yaml

monolog:
    handlers:
        main:
            # ...
            type: 'fingers_crossed'
            excluded_http_codes: [404]

https://symfony.com/blog/new-in-symfony-4-1-ignore-specific-http-codes-from-logs

答案 2 :(得分:0)

在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;
    }
}

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