【问题标题】:Why does my Django 1.3 logging setup cause all messages to be output twice?为什么我的 Django 1.3 日志记录设置会导致所有消息输出两次?
【发布时间】:2011-10-07 00:57:31
【问题描述】:

我的 Django 1.3 日志记录设置导致所有日志消息输出两次。我读过两次或多次导入 settings.py 会导致这个问题,但 Django 1.3 有新的日志功能,我认为我不会在任何地方导入 settings.py 两次。

settings.py 配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'simple': {
            'format': '%(levelname)s: %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',
        },
    },
    'loggers': {
        'custom': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    }
}

代码:

import logging
log = logging.getLogger('custom')

log.debug('message1')
log.debug('message2')

输出:

DEBUG: message1
DEBUG:custom:message1

感谢您的帮助。

【问题讨论】:

    标签: django logging


    【解决方案1】:

    您可能想尝试“disable_existing_loggers”:对吗?

    【讨论】:

      【解决方案2】:

      您是否尝试过设置propagate = False?连同 disable_existing_loggers = True?

      LOGGING = {
          'version': 1,
          'disable_existing_loggers': True,
          'formatters': {
              'simple': {
                  'format': '%(levelname)s: %(message)s'
              },
          },
          'handlers': {
              'console': {
                  'level': 'DEBUG',
                  'class': 'logging.StreamHandler',
                  'formatter': 'simple',
              },
          },
          'loggers': {
              'custom': {
                  'handlers': ['console'],
                  'level': 'DEBUG',
                  'propagate': False,
              },
          }
      }
      

      【讨论】:

      • 'propagate': False 在不更改 disable_existing_loggers 的情况下工作,谢谢。
      • 在 Django 2.2.8 上面临同样的问题
      【解决方案3】:

      我也遇到过同样的问题。我通过将根日志重定向到一个文件来修复它,并将项目日志重定向到文件和控制台。

      我grep了我的代码,找不到basicConfig()存在的地方,还尝试将disable_existing_loggers设置为True,但没有帮助,最后通过设置文件记录器解决了问题。我想在某些情况下这可能是设计问题。

      LOGGING = {
      'version': 1,
      'disable_existing_loggers': False,
      'formatters': {
          'simple': {
              # exact format is not important, this is the minimum information
              'format': '%(asctime)s %(name)-12s %(lineno)d %(levelname)-8s %(message)s',
          },
      },
      'handlers': {
          'console': {
              #'level': 'INFO',
              'class': 'logging.StreamHandler',
              'formatter': 'simple',
          },
          # Add Handler for mail_admins for `warning` and above
          'mail_admins': {
              'level': 'ERROR',
              'class': 'django.utils.log.AdminEmailHandler',
          },
          'file': {
              #'level': 'INFO',
              'class': 'logging.FileHandler',
              'formatter': 'simple',
              'filename': os.path.join(os.path.dirname(PROJECT_ROOT), 'crawler.admin.log'),
          },
      
      },
      
      'loggers': {
          # root logger
          '': {
              'level': 'INFO',
              'handlers': ['file', 'mail_admins'],
          },
          'scrapy': {
              'level': 'WARNING',
              'handlers': ['console', 'mail_admins'],
              'propagate': False,
          },
          'crawleradmin': {
              'level': 'INFO',
              'handlers': ['console', 'file', 'mail_admins'],
              # required to avoid double logging with root logger
              'propagate': False,
          },
      },
      }
      

      【讨论】:

        猜你喜欢
        • 2011-10-07
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 2011-09-12
        • 2017-06-30
        • 1970-01-01
        相关资源
        最近更新 更多