#================logger配置===========
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_LOG_DIR = os.path.join(BASE_DIR, "logs")
if not os.path.exists(BASE_LOG_DIR): os.mkdir(BASE_LOG_DIR)
LOGGING = {
'version': 1, # 保留的参数,默认是1
'disable_existing_loggers': False, # 是否禁用已经存在的logger实例
# 日志输出格式的定义
'formatters': {
'standard': { # 标准的日志格式化
'format': '[%(levelname)s] [%(asctime)s] %(message)s'
},
},
'filters': {#过滤器
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
}
},
# 处理器:需要处理什么级别的日志及如何处理
'handlers': {
# 默认日志处理器
'debug': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_LOG_DIR, "eie.log"), # 日志文件路径
'maxBytes': 1024 * 1024 * 100, # 日志大小 100M
'backupCount': 5, # 日志文件备份的数量
'formatter': 'standard', # 日志输出格式
'encoding': 'utf-8',
},
# 日志级别error
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_LOG_DIR, "error.log"), # 日志文件路径
'maxBytes': 1024 * 1024 * 100, # 日志大小 100M
'backupCount': 5,
'formatter': 'standard', # 日志格式
'encoding': 'utf-8',
},
},
'loggers': {
# 默认的logger应用如下配置
'django': {
'handlers': ['debug'],
'level': 'INFO',
'propagate': False, # 如果有父级的logger示例,表示不要向上传递日志流
},
'django.request': {
'handlers': ['error'],
'level': 'ERROR',
'propagate': False,
},
},
}
logger 四大神器----格式器formatter,过滤器filter,处理器handler,日志实例logger。
formatter
logger ----> handler ----------------> files, emails
filter
处理流程是这样的logger实例,通过这个实例来记录信息。django的这个logger就会把信息交给相应的handler,handler把信息用formater和filter处理一下,提交log(保存到文件,数据库,或者发送邮件)。
日志级别
级别 何时使用
DEBUG 详细信息,典型地调试问题时会感兴趣。
INFO 证明事情按预期工作。
WARNING 表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了’)。软件还是在正常工作。
ERROR 由于更严重的问题,软件已不能执行一些功能了。
CRITICAL 严重错误,表明软件已不能继续运行了。