Django / Celery中的哨兵登录停止工作

Posted

技术标签:

【中文标题】Django / Celery中的哨兵登录停止工作【英文标题】:Sentry logging in Django/Celery stopped working 【发布时间】:2014-10-08 19:43:48 【问题描述】:

我不知道出了什么问题。到目前为止,日志记录工作正常(我一直依赖它),但它似乎已经停止了。我写了一个小测试函数(也不起作用):

core.tasks.py

import logging
from celery.utils.log import get_task_logger

logger = get_task_logger(__name__)
logger.setLevel(logging.DEBUG)

@app.task
def log_error():
    logger.error('ERROR')

settings.py

INSTALLED_APPS += (
    'raven.contrib.django.raven_compat',
)

LOGGING = 
    'version': 1,
    'disable_existing_loggers': True,
    'root': 
        'level': 'INFO', #If set to DEBUG, prints ALL DJANGO debug logs.
        'handlers': ['console', 'sentry'],
    ,
    'formatters': 
        'simple': 
            'format': '%(levelname)s %(message)s'
        ,
    ,
    'handlers': 
        #log everything to the console
        'console':
            'level':'DEBUG',
            'class':'logging.StreamHandler',
            'formatter': 'simple'
        ,
        #logs directly to sentry
        'sentry': 
            'level': 'ERROR',
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
            #'class': 'raven.contrib.django.handlers.SentryHandler', #I have tried both
        ,
    ,
    'loggers': 
        'django.request':
            'handlers': ['console', 'sentry'],
            'level': 'DEBUG',
            'propagate': False,
        ,
        'celery.task':
            'handlers': ['console', 'sentry'],
            'level': 'DEBUG',
            'propagate': False,
        ,
        #this is the logger for celery itself
        'celery':
            'handlers': ['console', 'sentry'],
            'level': 'ERROR',
            'propagate': False,
        ,
    ,


from logging.config import dictConfig
dictConfig(LOGGING)

在 Django shell 中执行以下命令会记录到控制台,但没有到达 Sentry:

from core import tasks
tasks.log_error.delay()

同步执行任务时有效:

tasks.log_error()

帮忙!?

Django==1.6.2raven==5.0.0sentry==6.3.2Python 2.7 .3

【问题讨论】:

【参考方案1】:

我必须添加

CELERYD_HIJACK_ROOT_LOGGER=False

到我的 Django settings.py。

我真的不明白为什么我必须明确告诉 celery 不要劫持根记录器。

【讨论】:

以上是关于Django / Celery中的哨兵登录停止工作的主要内容,如果未能解决你的问题,请参考以下文章

Django使用Celery异步任务队列

Django 学习之Celery(芹菜)

Django Channels 从 Celery 任务发送组消息。 Asyncio 事件循环在所有异步任务完成之前停止

停止 Redis 后如何继续执行 celery 队列,然后再启动它?

Django登录随机停止工作

如何在 Celery-Django 应用程序中监视来自工作人员的事件?