También puede utilizar la estrategia de la actividad a nivel de error (en realidad incorporado 404 errores de Symfony con exclusión se hace uso de esta, así que supongo que esta es una forma correcta de hacerlo).
config.yml
monolog:
handlers:
main:
type: fingers_crossed
handler: loggly
activation_strategy: 'mybundle.monolog.fingers_crossed.activation_strategy'
loggly:
type: loggly
token: %loggly_token%
level: error
tag: %loggly_tag%
services.yml (tenga en cuenta que el nivel de acción se establece aquí, no en config.yml)
services:
mybundle.monolog.fingers_crossed.activation_strategy:
class: MyBundle\Handler\FingersCrossed\ErrorLevelActivationStrategy
arguments:
- '@request_stack'
- 'error'
ErrorLevelActivationStrategy.php
<?php
namespace MyBundle\Handler\FingersCrossed;
use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy as BaseErrorLevelActivationStrategy;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* Activation strategy that ignores client errors (4xx)
*/
class ErrorLevelActivationStrategy extends BaseErrorLevelActivationStrategy
{
protected $requestStack;
public function __construct(RequestStack $requestStack, $actionLevel)
{
parent::__construct($actionLevel);
$this->requestStack = $requestStack;
}
/**
* {@inheritdoc}
*/
public function isHandlerActivated(array $record)
{
$isActivated = parent::isHandlerActivated($record);
if (
$isActivated
&& isset($record['context']['exception'])
&& $record['context']['exception'] instanceof HttpException
&& $record['context']['exception']->getStatusCode() >= 400
&& $record['context']['exception']->getStatusCode() <= 499
&& ($request = $this->requestStack->getMasterRequest())
) {
$isActivated = false;
}
return $isActivated;
}
}
https://gist.github.com/sobstel/d791d0347ee1f4e47b6e
aleatoria nota lateral: se debe utilizar 'instaceof' en lugar de' tipo $ === 'bla '' http://php.net/manual/en/internals2.opcodes.instanceof.php – MDrollette
buena llamada. Reparado, gracias! –
[Lachlan Pease escribió] (http://article.gmane.org/gmane.comp.php.symfony.symfony2/9774 /): "La alternativa sería subclasificar Symfony \ Component \ HttpKernel \ EventListener \ ExceptionListener y cambiar la lógica a warn() en NotFoundHttpExceptions - esto tendría el beneficio de no necesitar múltiples oyentes de excepción (algo poco importante)), pero tendrías que mantener todo el código de generación de respuestas en tu propia subclase, que es una pesadilla de mantenimiento ". (¡Gracias, Lachlan, eso suena aún mejor!) –