Python 带有默认配置的自定义Django日志配置

Python 带有默认配置的自定义Django日志配置,python,django,logging,Python,Django,Logging,我正在尝试设置Django应用程序,但在配置登录settings.py文件时遇到问题 Django文档和Python的日志文档说明使用: 'disable_existing_logger':False将允许我使用现有的日志配置,这样我就不必重复自己的操作。这种情况下的默认日志记录是在django.utils.log.py 当我尝试在settings.py中的LOGGING\u CONFIG处理程序中使用DEFAULT\u LOGGING、require\u debug\u true中的现有过滤器

我正在尝试设置Django应用程序,但在配置登录settings.py文件时遇到问题

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

当我尝试在settings.py中的
LOGGING\u CONFIG
处理程序中使用
DEFAULT\u LOGGING
require\u debug\u true
中的现有过滤器时,我在尝试运行runserver时遇到一个KeyError

在尝试使用记录器中的现有处理程序(如
console
)时,我也会遇到相同的错误。我能想到的唯一原因是Django不知何故忽略了
disable\u existing\u logger
标志

以前有人遇到过这个问题吗?谢谢你的帮助

   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"],
        },
    },
}
添加处理程序中的第750行“/usr/lib/python3.4/logging/config.py” logger.addHandler(self.config['handlers'][h]) 文件“/usr/lib/python3.4/logging/config.py”,第317行,在__ value=dict.\uuuu getitem\uuuuuuu(self,key) KeyError:“控制台” 在处理上述异常期间,发生了另一个异常: 回溯(最近一次呼叫最后一次): 文件“/usr/lib/python3.4/logging/config.py”,第611行,在configure中 self.configure_记录器(名称,记录器[名称]) 文件“/usr/lib/python3.4/logging/config.py”,第775行,在configure_logger中 self.common_logger_config(记录器,配置,增量) 文件“/usr/lib/python3.4/logging/config.py”,第767行,在common\u logger\u config中 self.add_处理程序(记录器、处理程序) 文件“/usr/lib/python3.4/logging/config.py”,第752行,在add\u处理程序中 raise VALUERROR('无法添加处理程序%r:%s'(h,e)) ValueError:无法添加处理程序“控制台”:“控制台” 日志记录={ “版本”:1, “禁用现有日志记录器”:False, “格式化程序”:{ “活动”:{ '格式':'[%(levelname)s]%(路径名)s[%(行号)s]:%(消息)s', }, “调试”:{ '格式':'[%(levelname)s]%(路径名)s[%(行号)s]:%(消息)s', }, }, “处理程序”:{ “调试”:{ “级别”:“调试”, 'class':'logging.handlers.TimedRotatingFileHandler', “文件名”:“/var/www/app/log/debug.log”, “格式化程序”:“调试”, “备份计数”:48, ‘when’:‘H’, }, “活动”:{ “级别”:“信息”, 'class':'logging.handlers.TimedRotatingFileHandler', 'filename':'/var/www/app/log/activity.log', “格式化程序”:“活动”, “备份计数”:48, ‘when’:‘H’, }, “错误”:{ “级别”:“错误”, 'class':'logging.handlers.TimedRotatingFileHandler', 'filename':'/var/www/app/log/error.log', “格式化程序”:“活动”, “备份计数”:48, ‘when’:‘H’, }, “系统日志”:{ “级别”:“信息”, 'class':'logging.handlers.SysLogHandler', “格式化程序”:“活动”, “设施”:SysLogHandler.LOG\u LOCAL2, “地址”:“/dev/log”, }, }, “伐木工人”:{ “应用程序活动”:{ “处理程序”:[“活动”、“错误”、“调试”], “级别”:“调试”, "传播":对,, }, “django.request”:{ “处理程序”:[“邮件管理员”、“错误”、“活动”、“调试”], “级别”:“错误”, "传播":假,, }, “django.security”:{ “处理程序”:[“邮件管理员”、“错误”、“活动”], “级别”:“错误”, "传播":假,, }, “py.警告”:{ “处理程序”:[“控制台”,“调试”], }, }, }
在我看来,您需要将
控制台
处理程序的配置以及
django.utils.log.py
中的其他处理程序、过滤器和格式化程序(您使用的)添加到日志配置中


disable_existing_loggers
参数仅适用于记录器(不适用于处理程序、筛选器和格式化程序)

保持默认日志配置并仅自定义某些设置的最简单方法是更新django.utils.log.default_logging,django使用该参数配置日志:

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中,因为日志记录将在导入设置后立即配置。

能否在settings.py中显示日志记录配置?我想这可能会有帮助。。。我想你可能是对的,必须仔细阅读文档。记录器!=日志配置。感谢您的关注。为一些简单的调试目的省去了很多麻烦。