将Raven和Raven JS与金字塔Web应用程序集成。
pyramid_raven的Python项目详细描述
pyramid_raven集成 以及raven python clientraven-js带有 Pyramid网络应用程序。它 提供配置的raven client 在request.raven和 pyramid_layout 面板名为raven-js。
乌鸦有built in support for Pyramid applications 通过粘贴过滤器和日志处理程序。 pyramid_raven是 替代集成,在以下情况下有用:
- 您可以处理应用程序中的异常,即:您注册了 捕获所有呈现错误页的Exception视图 应用程序,从而防止错误到达wsgi管道
- 您还需要记录javascript错误
设置
使用pip:
安装pip install pyramid_raven
在的ini配置中配置raven dsn地址 应用程序:
raven.dsn = https://xxx:yyy@sentry.example.com/1
…或提供SENTRY_DSN environment variable:
SENTRY_DSN=http://public:secret@example.com/1
Configure your application 包括包裹:
config.include('pyramid_raven')
配置
在.iniconfiguration file中的任何raven.*命名空间设置 将传递给raven client 构造器-尽管你有责任强迫他们 正确类型,例如:
raven.timeout=3
您可以增加(已经相当全面的)请求集 通过添加空间与记录的服务器端异常一起发送的属性 独立的请求属性或方法名(不带参数调用)到:
pyramid_raven.additional_request_properties=foo bar pyramid_raven.additional_request_methods=baz bam
您还可以覆盖面板模板:
pyramid_raven.panel_tmpl=mypkg:templates/foo.tmpl
使用
您可以使用它记录服务器端错误:
@view_config(context=Exception) def system_error_view(context, request): """Example catch all exception handler.""" # Notify sentry. request.raven.captureException() # XXX E.g.: render error page. # ...
客户端javascript错误
客户端错误跟踪要求 pyramid_layout已配置 在pyramid_raven之前。
以及客户端错误:
<!-- in production, in the head of your main layout, above all other js --> ${panel('raven-js')}
例如:然后在随后加载的任何脚本中:
throw new Error('This javascript error will be logged.')
注意,如果您从外部域(例如,从 cdn)则许多浏览器不会记录错误,因为 源安全性(不跨域泄漏信息)。你可以 解决这个问题using CORS但是浏览器 在撰写本文时,至少可以说,支持是摇摆不定的。
测试
要运行测试,pip install nose coverage mock,例如:
$ nosetests --with-doctest --with-coverage --cover-tests --cover-package pyramid_raven pyramid_raven ...... Name Stmts Miss Cover Missing ------------------------------------------------------- pyramid_raven 9 0 100% pyramid_raven.client 69 0 100% pyramid_raven.constants 5 0 100% pyramid_raven.panel 39 0 100% ------------------------------------------------------- TOTAL 122 0 100% ---------------------------------------------------------------------- Ran 6 tests in 0.143s OK