我在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',
},
对我来说,最佳做法是什么?
答案 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')