TurboGears 和反弹:如何向 Raven 添加额外的、按请求的上下文以获得更多信息的哨兵报告?
TurboGears and backlash: How to add extra, per-request context to Raven for more informative Sentry reports?
通过backlash, TurboGears supports error reporting to Sentry via 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()
但是,现在我想知道获取 backlash
将用于报告的 client
实例的最简单或最正确的方法是什么?我想添加每个请求的信息,通常来自请求处理程序或 Controller
方法。
编辑 raven 上下文目前非常困难,因为错误报告器没有在任何地方注册,所以你不能说 "hey give me the error reporters" 并在该列表中查找哨兵。
目前唯一的方法是注册一个 after_config
挂钩,在配置过程中收集 Raven 客户端并将其存储在可访问的地方。
更改 backlash 中间件以将 reporters 存储在可访问的地方应该相当容易(例如 environ),但目前尚不可用。
顺便说一句,这里是 after_config
解决方案的一个简短示例,它应该使客户端可用 tg.app_globals.sentry_clients
,将其复制到您的 app_cfg.py
中,它应该会达到您的预期(没时间尝试,如果发现错误请见谅),然后就可以在需要的时候从客户端获取context:
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)
通过backlash, TurboGears supports error reporting to Sentry via 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()
但是,现在我想知道获取 backlash
将用于报告的 client
实例的最简单或最正确的方法是什么?我想添加每个请求的信息,通常来自请求处理程序或 Controller
方法。
编辑 raven 上下文目前非常困难,因为错误报告器没有在任何地方注册,所以你不能说 "hey give me the error reporters" 并在该列表中查找哨兵。
目前唯一的方法是注册一个 after_config
挂钩,在配置过程中收集 Raven 客户端并将其存储在可访问的地方。
更改 backlash 中间件以将 reporters 存储在可访问的地方应该相当容易(例如 environ),但目前尚不可用。
顺便说一句,这里是 after_config
解决方案的一个简短示例,它应该使客户端可用 tg.app_globals.sentry_clients
,将其复制到您的 app_cfg.py
中,它应该会达到您的预期(没时间尝试,如果发现错误请见谅),然后就可以在需要的时候从客户端获取context:
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)