使用默认配置的自定义Django日志配置

时间:2014-12-30 20:07:23

标签: python django logging

我正在尝试设置我的Django应用程序,并且在配置settings.py文件中的日志记录时出现问题。

Django文档和Python的日志文档说明使用: 'disable_existing_loggers': False将允许我使用现有的日志记录配置,这样我就不必重复自己了。在这种情况下,默认日志记录是django.utils.log.py

中的DEFAULT_LOGGING字典

当我尝试在DEFAULT_LOGGINGrequire_debug_true中使用现有的过滤器时,在我的一个设置为LOGGING_CONFIG的settings.py中,我在尝试运行runserver时遇到了KeyError。

尝试在记录器中使用现有处理程序时,我也会遇到同样的错误,例如console。我能想到的唯一原因是,Django不知何故忽视了disable_existing_loggers旗帜。

之前是否有人遇到此问题?谢谢你的帮助。

   File "/usr/lib/python3.4/logging/config.py", line 750, in add_handlers

       logger.addHandler(self.config['handlers'][h])
     File "/usr/lib/python3.4/logging/config.py", line 317, in __getitem__
       value = dict.__getitem__(self, key)
   KeyError: 'console'

   During handling of the above exception, another exception occurred:

   Traceback (most recent call last):
     File "/usr/lib/python3.4/logging/config.py", line 611, in configure
       self.configure_logger(name, loggers[name])
     File "/usr/lib/python3.4/logging/config.py", line 775, in configure_logger
       self.common_logger_config(logger, config, incremental)

     File "/usr/lib/python3.4/logging/config.py", line 767, in common_logger_config
       self.add_handlers(logger, handlers)
     File "/usr/lib/python3.4/logging/config.py", line 752, in add_handlers
       raise ValueError('Unable to add handler %r: %s' % (h, e))
   ValueError: Unable to add handler 'console': 'console'



LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'activity': {
            'format': '[%(levelname)s] %(pathname)s <%(funcName)s>[%(lineno)s] : %(message)s',
        },
        'debug': {
            'format': '[%(levelname)s] %(pathname)s <%(funcName)s>[%(lineno)s] : %(message)s',
        },
    },
    'handlers': {
        'debug': {
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/www/app/log/debug.log',
            'formatter': 'debug',
            'backupCount': 48,
            'when': 'H',
        },
        'activity': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/www/app/log/activity.log',
            'formatter': 'activity',
            'backupCount': 48,
            'when': 'H',
        },
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/www/app/log/error.log',
            'formatter': 'activity',
            'backupCount': 48,
            'when': 'H',
        },
        'syslog': {
            'level': 'INFO',
            'class': 'logging.handlers.SysLogHandler',
            'formatter': 'activity',
            'facility': SysLogHandler.LOG_LOCAL2,
            'address': '/dev/log',
        },
    },
    'loggers': {
        'app.activity': {
            'handlers': ["activity", "error", "debug"],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.request': {
            'handlers': ["mail_admins", "error", "activity", "debug"],
            'level': 'ERROR',
            'propagate': False,
        },
        'django.security': {
            'handlers': ["mail_admins", "error", "activity"],
            'level': 'ERROR',
            'propagate': False,
        },
        'py.warnings': {
            'handlers': ["console", "debug"],
        },
    },
}

2 个答案:

答案 0 :(得分:1)

在我看来,您需要将console处理程序的配置以及django.utils.log.py中的其余处理程序,过滤器和格式化程序(您使用的)添加到日志记录配置中。

disable_existing_loggers参数仅关注记录器(不是处理程序,过滤器和格式化程序)

答案 1 :(得分:0)

保留默认日志记录配置并仅自定义某些设置的最简单方法是更新Django用于配置日志记录的django.utils.log.DEFAULT_LOGGING

from django.utils.log import DEFAULT_LOGGING

# Enable logging to console from our modules by configuring the root logger
DEFAULT_LOGGING['loggers'][''] = {
    'handlers': ['console'],
    'level': 'INFO',
    'propagate': True
}

该字段必须位于settings.py中,因为将在导入设置后立即配置日志记录。