Django / Celery的Sentry日志记录停止工作 [英] Sentry logging in Django/Celery stopped working
问题描述
core.tasks.py
导入日志
/ pre>
from celery.utils.log import get_task_logger
logger = get_task_logger(__ name__)
logger.setLevel (log.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',#如果设置为DEBUG,则打印所有DJANGO调试日志。
'handlers':['console','sentry'],
},
'formatters':{
'simple':{
'format' '%(levelname)s%(message)s'
},
},
'处理程序':{
#log控制台的所有东西
'console' :{
'level':'DEBUG',
'class':'logging.StreamHandler',
'formatter':'simple'
},
#直接登录到哨兵
'sentry':{
'level':'ERROR',
'class':'raven.contrib.django.raven_compat.handlers.SentryHandler',
#'class':'raven.contrib.django.handlers.SentryHandler',#我尝试过
},
},
'loggers':{
'django .request':{
'handlers':['console','sentry'],
'level':'DEBUG',
'传播':False,
},
'celery.task':{
'handlers':['console','sentry'],
'level' DEBUG',
'propagate':False,
},
#this是芹菜本身的记录器
'芹菜':{
'handlers':['控制台','哨兵'],
'level':'ERROR',
'propagate':False,
},
},
}
from logging.config import dictConfig
dictConfig(LOGGING)
执行以下的Django shell日志到控制台,但是它没有从核心导入任务
任务到达Sentry:.log_error.delay()
在同步执行任务时工作:
tasks.log_error()
帮助!
Django == 1.6.2 , ra ven == 5.0.0 , sentry == 6.3.2 ,,Python 2.7.3
解决方案我不得不添加
CELERYD_HIJACK_ROOT_LOGGER = False
到我的Django settings.py。
我不明白为什么我明确地告诉芹菜要不劫持根记录器。
I have no idea whats wrong. So far logging worked fine (and I was relying on that) but it seems to have stopped. I wrote a little test function (which does not work either):
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)
Executing the following in the Django shell logs to the console but it doesn't reach Sentry:
from core import tasks tasks.log_error.delay()
It works when executing the task synchronously:
tasks.log_error()
Help!?
Django==1.6.2, raven==5.0.0, sentry==6.3.2, Python 2.7.3
解决方案I had to add
CELERYD_HIJACK_ROOT_LOGGER=False
to my Django settings.py.
I don't really understand why I explicitely have to tell celery to not hijack the root logger.
这篇关于Django / Celery的Sentry日志记录停止工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!