【问题标题】:how to pass username to rollbar via monolog, symfony2如何通过独白,symfony2将用户名传递给rollbar
【发布时间】:2016-02-04 13:47:47
【问题描述】:

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

我看到我可以通过rollbar config,如图所示here,我认为person_fn 是我需要的。我仍然不知道把这个函数放在哪里(这应该在服务中,因为我需要检查安全令牌)以及如何将它传递给 rollbar。

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

【问题讨论】:

    标签: symfony monolog rollbar


    【解决方案1】:

    您的问题分为两部分:

    滚动条

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

    Symfony

    ​​>

    免责声明:我对 Symfony 的使用或了解不多。

    This question 有一些很好的例子来说明如何在 Symfony 中获取当前用户。 (妙语:在控制器中可以调用$this.getUser()

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

    最后,还有一个经典的 PHP 举措:只要您有用户,就将其添加到 $_REQUEST。我不确定 Symfony 是否选择了这个,但它在非框架 PHP 应用程序中是一种有效的方式。

    【讨论】:

    • 感谢您的快速回答和继续挖掘的灵感。但是,正如您在我自己的回答中看到的那样,这是特定于 symfony 框架的。
    • 很高兴您找到了解决方案!
    【解决方案2】:

    找到解决方案:

    • 将 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%
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多