如何添加到Django的默认日志记录?

时间:2014-08-21 19:01:06

标签: django logging

我正在使用Django 1.6,并希望添加到 - 不替换 - Django's default logging。具体来说,除了Django的默认日志记录行为之外,我想使它成为,任何日志级别为DEBUG或更高的日志记录都会被写入自动轮换的日志文件中。

基于我通过搜索和我自己的实验发现的内容,您似乎必须重新定义所有日志记录(Django的默认值以及我的旋转文件日志记录),即使使用'disable_existing_loggers': False也是如此。我想我可能做错了。

我想看一下如何放入我的settings.py文件中的示例,这将允许我完成此任务。

3 个答案:

答案 0 :(得分:1)

settings.py只是Python,所以我们可以这样做:

from django.utils.log import DEFAULT_LOGGING

# Use defaults as the basis for our logging setup
LOGGING = DEFAULT_LOGGING

# We need some formatters. These ones are from the docs.
LOGGING['formatters'] = {
    'verbose': {
        'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
    },
    'simple': {
        'format': '%(levelname)s %(message)s'
    },
}

# A log file handler that rotates periodically
LOGGING['handlers'].update({
    'rotate': {
        'level': 'DEBUG',
        'class': 'logging.handlers.RotatingFileHandler',
        'formatter': 'verbose',
        'filename': '/tmp/debug.log',
    }
})

# The default 'django' logger is a catch-all that does nothing. We replace it with
# a rotating file handler.
LOGGING['loggers'].update({
    'django': {
        'handlers': ['rotate'],
        'propagate': True,
        'level': 'DEBUG',
    }
})

# If you don't want to completely replace the django handler, you could do something
# like this instead:
#LOGGING['loggers']['django']['handlers'] += ['rotate']

这会将您的旋转文件处理程序添加到现有处理程序,定义基本格式化程序,并将catch-all记录程序(不执行任何操作)替换为替换默认记录程序的记录程序

答案 1 :(得分:1)

根据您的评论,我试过这个。它似乎做了你要问的事。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'rotate': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/tmp/debug.log',
        }
    },
    'loggers': {
        'django': {
            'handlers': ['rotate'],
            'propagate': True,
            'level': 'DEBUG',
        }
    },
}

答案 2 :(得分:0)