Django,使用Celery时不会记录某些日志

时间:2016-07-02 03:10:31

标签: django logging sentry

我看到了我能看到的地方

logger.exception("hello")已执行。

但是没有记录在哨兵或文件上。

我有关于日志的设置,如下所示

LOGGING = {
     'version': 1,
     'disable_existing_loggers': True,
     'filters': {
         'require_debug_false': {
             '()': 'django.utils.log.RequireDebugFalse'
         }
     },
     'formatters': {
         'verbose': {
             'format': '[%(asctime)s] %(levelname)s (%(module)s:%(funcName)s:%(lineno)d) %(message)s'
         },
         'simple': {
             'format': '%(levelname)s %(message)s'
         },
     },
     'handlers': {
         'null': {
             'level': 'DEBUG',
             'class': 'logging.NullHandler',
         },
         # Send all messages to console
         'console': {
             'level': 'DEBUG',
             'class': 'logging.StreamHandler',
             'formatter': 'verbose'
         },
         # Warning messages are sent to admin emails
         'mail_admins': {
             'level': 'WARNING',
             'filters': ['require_debug_false'],
             'class': 'django.utils.log.AdminEmailHandler',
         },
         # critical errors are logged to sentry
         'sentry': {
             'level': 'INFO',
             'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
         },
     },
     'loggers': {
         # This is the "catch all" logger
         '': {
             'handlers': ['console', 'sentry'],
             'level': 'DEBUG',
             'propagate': False,
         },

         'django.db.backends': {
             'handlers': ['null'],  # Quiet by default!
             'propagate': False,
             'level': 'DEBUG',
         },
     }
  }

我用

记录东西
 import logging
 logger = logging.getLogger(__name__)

 logger.exception("error")
 logger.info({"error": "foo"})

为什么我会丢失一些日志?
(我已经跟着调试器中的代码执行了日志,但是在iftry / log文件中没有执行任何内容)..

1 个答案:

答案 0 :(得分:1)

问题是由芹菜引起的,hijacks the root ('') logger by default并丢弃任何先前配置的根记录器。这意味着您的配置会被忽略。

尝试添加此设置:

CELERYD_HIJACK_ROOT_LOGGER = False