Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何防止芹菜任务的重复异常日志记录_Python_Django_Celery_Sentry_Raven - Fatal编程技术网

Python 如何防止芹菜任务的重复异常日志记录

Python 如何防止芹菜任务的重复异常日志记录,python,django,celery,sentry,raven,Python,Django,Celery,Sentry,Raven,第二次编辑:经过一番挖掘,问题从如何使用局部变量记录异常变为如何防止芹菜发送第二条没有局部变量的日志消息。在下面的尝试之后,我注意到我总是收到两封电子邮件,一封每帧带有本地变量,另一封没有本地变量 第一次编辑:我通过添加一个自定义on_故障覆盖(用于所有任务,如: def include_f_locals(self, exc, task_id, args, kwargs, einfo): import logging logger = logging.getLogger('cel

第二次编辑:经过一番挖掘,问题从如何使用局部变量记录异常变为如何防止芹菜发送第二条没有局部变量的日志消息。在下面的尝试之后,我注意到我总是收到两封电子邮件,一封每帧带有本地变量,另一封没有本地变量

第一次编辑:我通过添加一个自定义on_故障覆盖(用于所有任务,如:

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}}
但现在的问题是错误出现了3次,一次通过芹菜记录器,两次通过根(尽管我没有在日志设置中传播“芹菜”记录器)

原始问题: 我有一个django/Cellery项目,最近我在其中添加了一个sentry处理程序,作为“ERROR”级别的根日志记录器。这对于django中发生的大多数错误和异常都很有效,芹菜工人除外

发生的情况是,sentry接收到一个带有回溯和守护进程的局部变量的异常,但不包括堆栈中每个帧的
f_局部变量(local vars)。这些异常确实出现在正常的python/django异常中


我想我可以尝试捕获所有异常并手动记录exc_信息。但这并不理想。

有趣的是,当我升级到5.0之后(特别是5.1之后)的版本时,我所有的麻烦都消失了

虽然我不确定哪些更改导致异常被正确记录(在sentry中正确出现了
f_locals
),但事实仍然是raven<5.0不适合我


此外,不需要做任何花哨的
CELERY_注释
legwork(如上所述),仅为正确的记录器定义sentry处理程序似乎就足以捕获异常以及其他日志级别的消息。

请参阅有关日志记录堆栈局部变量和重复日志记录的相关问题