django可重用应用程序收集未过期的异常,然后生成压缩的报告,就像在调试模式下得到的那样,并存储在数据库中
django-errorlog的Python项目详细描述
Django错误日志
django可重用应用程序收集未过期的异常,然后生成 comprehansive报告就像在调试模式下得到并存储在 数据库
简介
Django有自己的错误处理机制,它将发送电子邮件到 在设置中配置的管理地址。它起作用了但是有一些 短缺。
- 电子邮件中包含的堆栈跟踪与您可以看到的相同 在控制台中。它不包含可变值 对调试有用。
- 无法追踪错误,这是一封电子邮件,很难归类, 而且很难追踪状态。
- 有时一个同样的错误会给你带来成千上万的电子邮件 API碰巧经常访问。你会浪费很多时间去寻找 与错误不同的错误发生得最多。
本模块通过以下方式解决这些问题。
- 我们很喜欢Django BuildinDebug 500页面,它几乎包含了 我们需要调试的所有信息,比如请求信息, 用户、设置、使用本地变量的堆栈跟踪等等 我们需要一个中间件来捕获未处理的异常 只需调用django buildin reporter类来生成完整的 html异常报告,然后存储在数据库中。
- 每个错误项都有记录a.固定b.vcs的字段 版本(支持hg和git),您可以在这个bug之后ignoreit 已经解决了。然后它将从unfixed_error列表中消失。
- 错误将按异常类型和位置分类 引发异常的位置(location表示python文件路径 以及方法名)。所以在大多数情况下,发生了同样的错误 多次将只显示一次,但计数如何 很多时候都是这样。当错误被忽略时, 相同的错误将被标记为忽略。
此模块已在我公司的网站上运行超过1 一年,帮助解决了上千个错误。
更改日志
2016-12-04:0.1.0初始提交。从网上拆分代码 项目。编写文档,并添加测试。
安装
pip install django-errorlog
然后修改设置
- 在已安装的应用程序中添加errorlog。
- 如果使用django>;=1.10,请插入 ^位于MIDDLEWARES中的{tt4}$。 第一行。
- (可选)如果您的django项目位于vcs中(hg或 git),将VCS_SYSTEM = "hg"或VCS_SYSTEM = "git"设置为启用 误差转速跟踪。
然后执行python manage.py migrate以设置数据库表。
当您的视图出现500个错误时,将有一个新的日志项 存储。
用法
内置shell命令
>>>fromerrorlog.modelsimportError>>>Error.unfixed_errors{0:<Error:1-/test/2/-ValueError:A>,1:<Error:4-/test/1/-ValueError:B>}>>>error=Error.unfixed_errors[1]>>>error1:<Error:4-/test/1/-ValueError:B>>>># in this repr, the first number is the index to make it easy to select;>>># the second number 4 is the the count of the same error happened;>>># /test/1/ is the uri of the api;>>># ValueError is the exception type;>>># B is the args in the exception.>>>error.vcs_rev# the git/hg version of error, for hg, it's the incremental number that is orderable"1">>>error.ignore()# this command ignore the whole 4 error logs
Django管理
如果使用django buildin admin,则应该能够在 主页。
如果要查看HTML错误报告,则需要构建视图 您可以自己将错误HTML传输到浏览器。
提前使用
您可以使用error.log_exception在一个错误中记录一个特定的错误 一定的范围。
fromerrorlog.modelsimportErrorwithError.log_exception("name",reraise=False):do_something_here()
如果reraise = True,则在记录之后,异常将保持 振作起来。注意,如果数据库原子打开,因为未处理 错误将使django回滚事务,因此此日志将 也被回滚。
如果reraise = False,则它将记录异常,然后停止 提出并继续运行以下代码。它和 以下代码
try:do_something_here()exceptExceptionase:pass
下面是我如何使用它的示例
withError.log_exception("send_email_through_mailgun",reraise=False):response=requests.post(url,parms)content=response.contentstatus_code=response.status_codeifstatus_code!=200:raiseValueError("Mailgun failed")other_stuff()
这样我就可以在mailgun的api返回错误时捕获,并保持 一切都在进行。