Je voudrais ajouter les userId
et username
, fournis par FOSUserBundle
, à mon Logger (Monolog). J'ai suivi this tutorial pour pouvoir enregistrer l'IP, ça marche.Symfony/Monolog: processeur personnalisé avec FOSUserBundle données
Mon code ci-dessous pauses, parce que $this->tokenStorage->getToken()
est NULL
, même si je suis connecté.
services.yml
monolog.processor.user:
class: AppBundle\Log\UserProcessor
arguments: [ "@request_stack", "@security.token_storage" ]
tags:
- { name: monolog.processor }
AppBundle/Log/UserProcessor.php
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use AppBundle\Entity\User;
class UserProcessor
{
private $requestStack;
private $tokenStorage;
public function __construct(RequestStack $requestStack, TokenStorageInterface $tokenStorage)
{
$this->requestStack = $requestStack;
$this->tokenStorage = $tokenStorage;
}
public function __invoke(array $record)
{
$username = '';
$userId = 0;
$user = $this->tokenStorage->getToken()->getUser();
// !!! ERROR !!!
// $this->tokenStorage->getToken() is NULL
if ($user instanceof User) {
$username = $user->getUsername();
$userId = $user->getId();
}
$record['extra']['user_id'] = $userId;
$record['extra']['username'] = $username;
return $record;
}
}
Des idées? Merci d'avance!
Je dirais que le problème est probablement que le processeur est appelé à enregistrer quelque chose avant que la sécurité ait pu agir et obtenir l'utilisateur actuel. Il y a très peu de choses que vous pouvez faire si c'est le cas, il suffit de vérifier si le jeton existe et s'il ne se connecte pas à l'utilisateur –
@CarlosGranados On dirait que vous avez raison. Logique! J'ai testé avec succès le processeur avec un gestionnaire/canal personnalisé que j'ai appelé dans les contrôleurs (où la sécurité est accessible). Postez juste votre commentaire comme réponse et je l'accepterai. Merci! –