django logger日志输出配置
相关网址: http://www.cnblogs.com/chenxuming/articles/9529128.html
1、Django的日志在/your_project_name/settings.py文件中配置
# log 首先创建日志存储路径.
import logging
import django.utils.log
import logging.handlers
log_path = os.path.join(BASE_DIR, "logs")
if not os.path.exists(log_path):
os.makedirs("logs")
# DJANGO_LOG_LEVEL=DEBUG
LOGGING = {
'version': 1, # 保留字
'disable_existing_loggers': False, # 禁用已经存在的logger实例
# 日志文件的格式
'formatters': {
# 详细的日志格式
'standard': {
'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
'[%(levelname)s][%(message)s]'
},
# 简单的日志格式
'simple': {
'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
},
# 定义一个特殊的日志格式
'collect': {
'format': '%(message)s'
}
},
# 过滤器
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
# 处理器
'handlers': {
'console': { # 在终端打印
'level': 'DEBUG',
'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志
'class': 'logging.StreamHandler', #
'formatter': 'simple'
},
'default': { # 默认的
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_DIR+'/logs/', "all.log"), # 日志文件
'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 3, # 最多备份几个
'formatter': 'standard',
'encoding': 'utf-8',
},
'error': { # 专门用来记错误日志
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_DIR+'/logs/', "error.log"), # 日志文件
'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8',
},
'collect': { # 专门定义一个收集特定信息的日志
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_DIR+'/logs/', "collect.log"),
'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 5,
'formatter': 'collect',
'encoding': "utf-8"
},
'scprits_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR+'/logs/', "script.log"),
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter':'standard',
}
},
'loggers': {
'django': { # 默认的logger应用如下配置
'handlers': ['default', 'console', 'error'], # 上线之后可以把'console'移除
'level': 'DEBUG',
'propagate': True, # 向不向更高级别的logger传递
},
'collect': { # 名为 'collect'的logger还单独处理
'handlers': ['console', 'collect'],
'level': 'INFO',
},
'scripts': {
'handlers': ['scprits_handler'],
'level': 'INFO',
'propagate': False
},
},
}
2、此配置分成三个部分:
-
formatters: 指定输出的格式,被handler使用。
-
handlers: 指定输出到控制台还是文件中,以及输出的方式。被logger引用。
-
loggers: 指定django中的每个模块使用哪个handlers。以及日志输出的级别。
注意:日志的输出级别是由loggers中的每个模块中level选项定义。如果没有配置,那么默认为warning级别。
handlers与loggers都存在level,两者不同:
1、loggers中的level表示可以接受的错误级别,就是说loggers接受level或者比level更高级别的错误,
由propagate决定:propagate为True, 则向上传播;
2、handlers的level表示日志级别
3、使用
import logging
logger = logging.getLogger('django')
logger.info('-------------------------')
logger.error(str(e))
logger.warn('warn')
logger.debug('debug')
效果图如下所示: