Python Celery - 忽略日志级别信息的工作人员

Posted

技术标签:

【中文标题】Python Celery - 忽略日志级别信息的工作人员【英文标题】:Python Celery - Worker ignoring loglevel INFO 【发布时间】:2013-12-28 02:15:20 【问题描述】:

我正在使用以下命令:

celery worker -l info -A django_app --concurrency=10 --autoreload

但 DEBUG 日志仍在涌出,使用 -l warning--logfile 时也是如此


知道为什么 Celery 会忽略日志设置吗?


更多细节:

日志来自Pythonsuds,它使用DEBUG 输出到记录器。

【问题讨论】:

Django Celery Logging Best Practice的可能重复 【参考方案1】:

尝试使用CELERYD_HIJACK_ROOT_LOGGER setting:

celery_instance = Celery('django_app')
celery_instance.add_defaults(
    'CELERYD_HIJACK_ROOT_LOGGER': False,
)

【讨论】:

【参考方案2】:

我遇到了同样的问题,我决定在settings.py 中调整日志级别:

LOGGING['loggers']['celery'] = 
                               'handlers': ['console', <etc>],
                               'level': <LEVEL_YOU_WANT>,
                               'propagate': True,
                              

另外我决定禁用一些“不感兴趣”的日志:

LOGGING['loggers']['celery.redirected'] = 
                                           'handlers': ['console', <etc>],
                                           'level': <LEVEL_YOU_WANT>,
                                           'propagate': False,
                                          
for i in ['worker', 'concurrency', 'beat']:
    LOGGING['loggers']['celery.' + i] = 
                               'handlers': [],
                               'level': 'WARNING',
                               'propagate': True,
                              
for i in ['job', 'consumer', 'mediator', 'control', 'bootsteps']:
    LOGGING['loggers']['celery.worker.' + i] = 
                               'handlers': [],
                               'level': 'WARNING',
                               'propagate': True,
                              

这样做只会让您看到来自您的任务的日志,而不是 Celery 的“机器”。

【讨论】:

以上是关于Python Celery - 忽略日志级别信息的工作人员的主要内容,如果未能解决你的问题,请参考以下文章

在 Celery 中使用 Python 标准日志记录

Python中logging模块

如何使用 python 日志框架在带有回溯的警告或信息级别记录异常?

Python-logging模块

基于 Django + Celery 的应用程序的动态(即运行时可配置)日志配置

python日志模块-logging