目前我有monolog在发生错误时向我发送电子邮件。我发现404错误只是污染了我的电子邮件,而我的提供商由于我自己发送的电子邮件数量而最终暂停我的帐户。我决定排除所有404错误,因为所有错误都是由于机器人正在寻找漏洞,而不是来自客户端。
排除代码:
excluded_404s:
- ^/
我现在看到的问题是,如果机器人使用除GET之外的http方法,symfony仍会记录404错误。我的电子邮件现在被
等条目污染了 HEAD :80/phpmyAdmin/
如何排除所有404错误,包括使用除GET以外的http方法的错误?
编辑: 好家伙。初学者错了。似乎在我上次部署配置后,我没有清除prod缓存,我发现配置已缓存。我正在使用部署程序来部署我的代码更新,但我想它中缺少清除缓存命令。
答案 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代码:
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 }