tut*_*uju 5 python django celery sentry raven
第二次编辑:经过一些挖掘后,问题从如何使用局部变量记录异常变为如何防止芹菜发送没有本地变量的第二条日志消息.经过下面的尝试,我实际上注意到我总是收到2封电子邮件,其中一封每帧都有本地变量,另一封没有.
First Edit:我设法通过添加自定义的on_failure覆盖来获取局部变量(对所有任务使用注释,如下所示:
def include_f_locals(self, exc, task_id, args, kwargs, einfo):
import logging
logger = logging.getLogger('celery')
logger.error(exc, exc_info=einfo)
CELERY_ANNOTATIONS = {'*': {'on_failure': include_f_locals}}
Run Code Online (Sandbox Code Playgroud)
但现在的问题是错误到达3次,一次通过芹菜记录器,两次通过root(虽然我没有在我的日志记录设置中传播'celery'记录器)
原始问题: 我有一个django/celery项目,我最近添加了一个岗位处理程序作为根记录器,其级别为"ERROR".这适用于django中发生的大多数错误和异常,除了来自芹菜工人的错误和异常.
发生的事情是,sentry接收到跟踪和守护进程的本地的异常,但不包括f_locals堆栈中每个帧的(本地变量).这些确实出现在普通的python/django异常中.
我想我可以尝试捕获所有异常并手动使用exc_info记录.但这不太理想.
有趣的是,当我简单地将raven升级到 5.0 之后的版本(特别是 5.1 之后)时,我所有的麻烦都消失了。
虽然我不确定哪些更改导致异常被正确记录(正确f_locals出现在哨兵中),但事实仍然是 raven < 5.0 对我不起作用。
另外,不需要做任何花哨的跑腿CELERY_ANNOTATIONS工作(如上所述),简单地为正确的记录器定义哨兵处理程序似乎足以捕获异常以及其他日志记录级别的消息。
| 归档时间: |
|
| 查看次数: |
1095 次 |
| 最近记录: |