src/Logger/LogProcessor.php line 87
<?phpnamespace App\Logger;use App\Entity\User;use Monolog\LogRecord;use Monolog\Level;use Symfony\Component\Asset\Context\RequestStackContext;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\HttpKernel\Event\RequestEvent;use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;class LogProcessor{/*** @var User*/private $user;private $pathInfo;private $uri;private $method;private $params;private $json;private $tokenStorage;public function __construct(TokenStorageInterface $tokenStorage){$this->tokenStorage = $tokenStorage;}// this method is called for each log record; optimize it to not hurt performancepublic function __invoke(LogRecord $record): LogRecord{// Skip processing 404 errors to prevent them from being logged/emailedif ($this->is404Error($record)) {// Create a new record with DEBUG level instead of directly modifying itreturn $record->with(level: Level::Debug);}$record = $record->with(extra: array_merge($record->extra, ['url' => $this->pathInfo,'uri' => $this->uri,'method' => $this->method,'params' => $this->params,'json' => $this->json,'user' => 'anon.']));if (!$this->user) {return $record;}$email = $this->user->getEmail();return $record->with(extra: array_merge($record->extra, ['user' => $email]));}/*** Check if the log record is for a 404 error*/private function is404Error(LogRecord $record): bool{// Check if this is a NotFoundHttpExceptionif (isset($record['context']['exception']) && $record['context']['exception'] instanceof NotFoundHttpException) {return true;}// Check message content for 404 error patternsif (isset($record['message']) && (strpos($record['message'], 'NotFoundHttpException') !== false ||strpos($record['message'], 'No route found') !== false)) {return true;}return false;}public function onKernelRequest(RequestEvent $event): void{$request = $event->getRequest();$this->pathInfo = $request->getPathInfo();$this->method = $request->getMethod();$this->uri = $request->getRequestUri();if ('GET' === $this->method) {$params = $request->query->all();} elseif ('application/json' === $request->getContentTypeFormat()) {$content = $request->getContent();$params = json_decode($content, true) ?? [];$this->json = $content;} else {$params = $request->request->all();}$this->params = json_encode($params);$token = $this->tokenStorage->getToken();if (null === $token) {return;}$user = $token->getUser();if (!is_object($user)) { // e.g. anonymous authenticationreturn;}$this->user = $user;}}