Symfony/Monolog:带有 FOSUserBundle 数据的自定义处理器

Symfony/Monolog: Custom processor with FOSUserBundle data

我想将 FOSUserBundle 提供的 userIdusername 添加到我的 Logger (Monolog)。我按照 this tutorial 来记录 IP,它正在工作。

我下面的代码中断了,因为 $this->tokenStorage->getToken()NULL,即使我已登录也是如此。

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;
    }
}

有什么想法吗? 提前致谢!

问题在于,在安全措施能够采取行动并获取当前用户之前调用处理器来记录某些内容。只需检查令牌是否存在,如果不存在则不登录用户