向哨兵报告错误的aiohttp中间件
aiohttp-sentr的Python项目详细描述
用法
只需添加SentryMiddleware作为中间件:
fromaiohttpimportwebfromaiohttp_sentryimportSentryMiddlewareapp=web.Application(middlewares=[SentryMiddleware()])
配置
如果要自定义错误报告, 您可以使用可选的sentry_kwargs参数, 这是一个dict的Kwargs传递到较低级别的哨兵库raven。 使用此选项,您可以指定环境详细信息,筛选出特定异常,等等:
fromaiohttpimportwebfromaiohttp_sentryimportSentryMiddlewareapp=web.Application(middlewares=(SentryMiddleware({'environment':'foo','release':'bar','ignore_exceptions':'aiohttp.HTTPClientError'}),# ...),)
如果您使用的是标准库的logging模块, 我们有一个方便的参数帮你修补, 要让记录器调用自动向哨兵发送事件:
警告
这将全局修改日志记录配置 当您实例化中间件时。 即使您最终没有使用中间件实例来处理请求, 你所有的日志都会送到哨兵那里。
importloggingfromaiohttpimportwebfromaiohttp_sentryimportSentryMiddlewareapp=web.Application(middlewares=[SentryMiddleware(patch_logging=True,sentry_log_level=logging.WARNING)],)
将数据附加到事件
默认情况下,aiohttp sentry将此数据与报告的异常一起传递:
- http方案
- http方法
- 网址
- 查询字符串
- 请求头(包括cookies)
- 请求者的IP地址
如果你需要更多的岗哨数据, 可以通过从^{tt1}子类化来实现$ 重写get_extra_data方法, 默认情况下返回以上所有内容。 这就是它的样子:
classDetailedSentryMiddleware(SentryMiddleware):asyncdefget_extra_data(self,request):return{**awaitsuper().get_extra_data(request),'settings':request.app['settings'],}
虽然get_extra_data是一个协程, 这意味着它可以进行数据库查询、api调用, 或其他I/O操作,请小心使用! 确保您理解每次发生错误时执行昂贵操作的含义。 如果错误的根本原因是数据库过载, 你只会让问题变得更糟, 却连你想要的额外信息都得不到。