通过backlash,TurboGears支持通过Sentry向Raven报告错误。启用错误报告非常简单,只需在.ini
配置文件中添加适当的设置,例如:
[DEFAULT]
debug = false
trace_errors.sentry_dsn = https://[…]
trace_slowreqs.enable = true
trace_slowreqs.sentry_dsn = https://[…]
set debug = false
根据Raven的documentation,为报告的内容添加更多上下文应该就像
一样简单def handle_request(request): # In TurboGears, this would be a controller instead.
client.context.merge({'user': {
'email': request.user.email
}})
try:
...
finally:
client.context.clear()
但是,现在我想知道获取client
将用于报告的backlash
实例的最简单,最正确的方法是什么?我想添加每个请求信息,通常来自请求处理程序或Controller
方法。
答案 0 :(得分:4)
编辑乌鸦上下文目前非常困难,因为错误记者没有在任何地方注册,所以你不能说“嘿,给我错误记者”,并在该列表中寻找哨兵。
目前唯一的方法是注册after_config
挂钩,在配置过程中收集Raven客户端并将其存储在可访问的地方。
更改反弹中间件以将记者存储在可访问的位置应该相当容易(例如环境),但目前它不可用。
顺便说一下这里是after_config
解决方案的一个简短示例,该解决方案应该将客户端设为tg.app_globals.sentry_clients
,将其复制到app_cfg.py
中,它应该按照您的预期执行(不是没有时间尝试它,抱歉,如果你发现错误),那么你可以在需要时从客户端获取上下文:
def gather_sentry_client(app):
from backlash import TraceErrorsMiddleware, TraceSlowRequestsMiddleware
try:
trace_errors_app = app.app.application
except:
return app
if not isinstance(trace_errors_app, TraceErrorsMiddleware):
return app
trace_errors_client = None
for reporter in trace_errors_app.reporters:
if hasattr(reporter, 'client'):
trace_errors_client = reporter.client
slow_reqs_app = trace_errors_app.app
slow_reqs_client = None
if isinstance(slow_reqs_app, TraceSlowRequestsMiddleware):
for reporter in slow_reqs_app.reporters:
if hasattr(reporter, 'client'):
slow_reqs_client = reporter.client
from tg import config
app_globals = config['tg.app_globals']
app_globals.sentry_clients = {
'errors': trace_errors_client,
'slowreqs': slow_reqs_client
}
return app
from tg import hooks
hooks.register('after_config', gather_sentry_client)