2

通过反冲TurboGears支持通过Raven向Sentry报告错误。启用报错非常简单,只需在配置文件中添加相应的设置即可,例如:.ini

[DEFAULT]
debug = false
trace_errors.sentry_dsn = https://[…]
trace_slowreqs.enable = true
trace_slowreqs.sentry_dsn = https://[…]

set debug = false

根据 Raven 的文档,为报告的内容添加更多上下文应该很简单

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方法。

4

1 回答 1

4

编辑 raven 上下文目前非常困难,因为错误报告器未在任何地方注册,因此您不能说“嘿,给我错误报告器”并在该列表中查找 Sentry 。

目前唯一的方法是注册一个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)
于 2015-11-14T23:34:47.280 回答