在Django中:我可以将日志记录级别设置为高于CRITICAL吗?

时间:2013-12-06 18:29:21

标签: python django logging

我在Django 1.5中有一个项目,并且有一个用于调试,信息和错误的日志处理程序。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'console':{
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file_debug':{
            'level':'DEBUG',
            'class':'logging.handlers.TimedRotatingFileHandler',
            'filename': os.path.join(SITE_ROOT, '..','logs','DEBUG.log'),
            'when':'midnight',
            'interval':1,
            'backupCount': 4,
            'formatter':'simple',
            'filters':['require_debug_true']
        },
        'file_info':{
            'level':'INFO',
            'class':'logging.handlers.TimedRotatingFileHandler',
            'filename': os.path.join(SITE_ROOT, '..','logs','INFO.log'),
            'when':'midnight',
            'interval':1,
            'backupCount': 4,
            'formatter':'simple',
        },
        'file_error':{
            'level':'ERROR',
            'class':'logging.handlers.TimedRotatingFileHandler',
            'filename': os.path.join(SITE_ROOT, '..','logs','ERROR.log'),
            'when':'midnight',
            'interval':1,
            'backupCount': 4,
            'formatter':'simple',
        },
    },
    'loggers': {
        'django.request':{
            'handlers': ['console'],
            'propagate': False,
            'level': 'DEBUG',
        },
    },
}

但是我希望有一个只包含特定内容的日志文件,我不想在其中打印任何错误。我认为使用CRITICAL级别可能会解决我的问题,但由于我的日志信息仅用于报告信息,因此通用级别高于CRITICAL可能会变得很少,例如:

        'file_report':{
            'level':'REPORT',
            'class':'logging.handlers.TimedRotatingFileHandler',
            'filename': os.path.join(SITE_ROOT, '..','logs','REPORT.log'),
            'when':'midnight',
            'interval':1,
            'backupCount': 4,
            'formatter':'simple',
        },

对我来说,最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

您应该配置自定义记录器并向其发送消息。例如,假设您的包名为foo

LOGGING = {
    ...
    'handlers': {
        ...
        'file_report': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': os.path.join(SITE_ROOT, '..', 'logs', 'REPORT.log'),
            'when':'midnight',
            'interval': 1,
            'backupCount': 4,
            'formatter':'simple',
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['console'],
            'propagate': False,
            'level': 'DEBUG',
        },
        'foo.report': {
            'handlers': ['file_report'],
            'propagate': False,
            'level': 'INFO',
        },
    },
}

然后在您的应用程序代码中:

import logging
logging.getLogger('foo.report').info('something something')