Django / Celery的Sentry日志记录停止工作 [英] Sentry logging in Django/Celery stopped working

查看:186
本文介绍了Django / Celery的Sentry日志记录停止工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道有什么问题。到目前为止,伐木工作正常(我依靠这个),但似乎已经停止了。我写了一个小测试函数(这也不起作用):



core.tasks.py

 导入日志
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')
/ pre>

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆