【发布时间】:2020-09-01 15:09:54
【问题描述】:
我们的 Django 应用程序配置为将所有 logger.errors 和 logger.exceptions 发送到 Sentry。我正在尝试实现一些东西,在 some 情况下,我可以在异常发生之前为有问题的事件分配一个自定义标记,并适当地标记该事件。由于我在不止一个地方使用它,所以我想做一个这样的函数:
from sentry_sdk import push_scope
def set_sentry_custom_tag(key: str, value: str) -> None:
with push_scope() as scope:
scope.set_tag(key, value)
logger.info(f'Set sentry custom tag -> {key}:{value}')
...并像这样使用它:
try:
check_widget_factory()
except Exception as e:
set_sentry_custom_tag('my-tag-key', 'my-tag-value')
logger.exception(f'Widget check failed: {e}')
我认为这会起作用,但不确定push_scope 是否需要直接在发生异常的方法中——我对Scope 的工作原理有点模糊Sentry,如果它在传递给将事件发送到 Sentry 的记录器处理之前的即时帧中的某个上下文中。
我正在尝试编写一些测试以确保正确设置此标记并在引发异常时附加到事件,但就如何获取本地范围并验证标记是否为空而言放。我可以修改函数以返回范围,然后像那样检查它,但理想情况下,这不是它在生产中的行为方式。我需要一些类似的东西:
def test_set_sentry_custom_tag(self):
set_sentry_custom_tag(key='test-key', value='test-value')
scope = find_the_current_scope_somehow()
self.assertIn('test-key', scope._tags.keys())
self.assertEqual(scope._tags['test-key'], 'test-value')
有人在 Sentry 中针对此类案例进行了一些自定义标记,并且可以分享测试是如何完成的吗?
【问题讨论】:
标签: python django testing sentry