如何通过monolog,symfony2将用户名传递给rollbar

时间:2015-11-04 06:58:11

标签: symfony monolog rollbar

我正在使用rollbar.com收集有关symfony2应用中的例外的所有详细信息。但是我不明白如何配置monolog所以它会将用户名和用户ID传递给rollbar。

我看到我可以通过显示rollbar confighere而我正在考虑person_fn是我需要的。我仍然不知道在哪里放置此功能(这应该在服务中,因为我需要检查安全令牌)以及如何将其传递给滚动条。

# config_prod.yml
rollbar:
    type: rollbar
    level: error
    token: %rollbar_token%
    config:
        person_fn: getUserForRollbarRightAboutNowOrSomething

2 个答案:

答案 0 :(得分:3)

找到解决方案:

  • 将monolog / monolog包更新至至少1.17.0版本。
  • 创建ContextProcessor并更新用户信息

    #src/AppBundle/Monolog/RollbarContextProcessor
    
    namespace AppBundle\Monolog;
    
    use AppBundle\Entity\User;
    use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
    
    class RollbarContextProcessor
    {
        private $tokenStorage;
    
        public function __construct(TokenStorageInterface $tokenStorage)
        {
            $this->tokenStorage = $tokenStorage;
        }
    
        public function processRecord($record)
        {
            if ($this->tokenStorage->getToken()) {
                $user = $this->tokenStorage->getToken()->getUser();
    
                if ($user instanceof User) {
                    $record['context']['payload']['person'] = [
                        'id' => $user->getId(),
                        'username' => $user->getUsername(),
                        'email' => $user->getEmail(),
                    ];
                }
            }
    
            return $record;
        }
    }
    
  • 将ContextProcessor配置为具有monolog.processor标记的服务。

    # app/config/config_prod.yml
    services:
        monolog.processor.rollbar_context:
            class: AppBundle\Monolog\RollbarContextProcessor
            arguments:  [@security.token_storage]
            tags:
                - { name: monolog.processor, method: processRecord, handler: rollbar }
    monolog:
        handlers:
            rollbar:
                type: rollbar
                level: error
                token: %rollbar_token%
    

答案 1 :(得分:1)

您的问题分为两部分:

ROLLBAR

person_fn正是您所需要的。您应该能够使用字符串添加对函数的引用(例如:"MyClass::static_function_reference""my_function_name")。

Symfony的

免责声明:我不会使用或了解Symfony。

This question有一些关于如何在Symfony中获取当前用户的优秀示例。 (打孔线:在控制器中,您可以调用$this.getUser()

This question有一个很好的示例,说明如何注入服务中的当前用户。 (制作一个取决于SecurityContextTokenStorage的Twig扩展,使用这些依赖关系来获取用户对象。

最后,经典的PHP移动:只要有用户将其添加到$_REQUEST。我不确定Symfony是否同意这一点,但它在非框架PHP应用程序中是一种有效的方式。