Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
UserProcessor
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 __invoke
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Logger;
4
5use Monolog\Attribute\AsMonologProcessor;
6use Monolog\LogRecord;
7use Symfony\Bundle\SecurityBundle\Security;
8use Symfony\Component\HttpFoundation\RequestStack;
9
10/**
11 * Add login name in logger.
12 */
13#[AsMonologProcessor]
14class UserProcessor
15{
16    private Security $security;
17    private RequestStack $requestStack;
18
19    public function __construct(Security $security, RequestStack $requestStack)
20    {
21        $this->security = $security;
22        $this->requestStack = $requestStack;
23    }
24
25    // this method is called for each log record; optimize it to not hurt performance
26    public function __invoke(LogRecord $record): LogRecord
27    {
28        $user = $this->security->getUser();
29        $record->extra['user'] = $user?->getUserIdentifier();
30        $record->extra['url'] = $this->requestStack->getCurrentRequest()?->getRequestUri();
31
32        return $record;
33    }
34}