TurboGears和反弹:如何为Raven添加额外的每请求上下文以获取更多信息量的Sentry报告?

时间:2015-11-14 13:23:02

标签: python sentry turbogears2 turbogears raven

通过backlashTurboGears支持通过SentryRaven报告错误。启用错误报告非常简单,只需在.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方法。

1 个答案:

答案 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)