我正在使用rollbar.com收集有关symfony2应用中的例外的所有详细信息。但是我不明白如何配置monolog所以它会将用户名和用户ID传递给rollbar。
我看到我可以通过显示rollbar config的here而我正在考虑person_fn
是我需要的。我仍然不知道在哪里放置此功能(这应该在服务中,因为我需要检查安全令牌)以及如何将其传递给滚动条。
# config_prod.yml
rollbar:
type: rollbar
level: error
token: %rollbar_token%
config:
person_fn: getUserForRollbarRightAboutNowOrSomething
答案 0 :(得分:3)
找到解决方案:
创建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)
您的问题分为两部分:
person_fn
正是您所需要的。您应该能够使用字符串添加对函数的引用(例如:"MyClass::static_function_reference"
或"my_function_name"
)。
免责声明:我不会使用或了解Symfony。
This question有一些关于如何在Symfony中获取当前用户的优秀示例。 (打孔线:在控制器中,您可以调用$this.getUser()
)
This question有一个很好的示例,说明如何注入服务中的当前用户。 (制作一个取决于SecurityContext
或TokenStorage
的Twig扩展,使用这些依赖关系来获取用户对象。
最后,经典的PHP移动:只要有用户将其添加到$_REQUEST
。我不确定Symfony是否同意这一点,但它在非框架PHP应用程序中是一种有效的方式。