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.2、raven==5.0.0、sentry==6.3.2、Python 2.7 .3
【问题讨论】:
【参考方案1】:我必须添加
CELERYD_HIJACK_ROOT_LOGGER=False
到我的 Django settings.py。
我真的不明白为什么我必须明确告诉 celery 不要劫持根记录器。
【讨论】:
以上是关于Django / Celery中的哨兵登录停止工作的主要内容,如果未能解决你的问题,请参考以下文章
Django Channels 从 Celery 任务发送组消息。 Asyncio 事件循环在所有异步任务完成之前停止