想必日志对于问题定位的重要性,不言而喻吧
那此章节,我们就来梳理下logging模块日志的相关知识吧
- Logger(日志器): 提供应用程序所使用的接口
- Handler(处理器):将logger创建的日志输出到指定的位置,如 文件,console控制台,网络等
- Filter(过滤器):更细粒度的控制具体是输出哪条日志
- Formatter(格式器):控制日志输出格式
Logger是入口,Handler是真正的执行者,Handler可以通过Filter 和 Formatter对需要输出的日志内容做过滤和格式化。
3.logging模块的日志级别loggging模块将日志分为以下日志等级
- DEBUG: 最详细的日志信息,应用场景:问题诊断
- INFO: 关键节点信息,应用场景:记录预期的系统正常工作信息
- WARNING: 发生不期望的场景时需记录的信息,用作提示警醒,但是此时系统一切正常
- ERROR: 当某个问题产生导致某功能不能正常使用时需记录的信息
- CRITICAL:当发生严重的错误,导致系统无法继续正常运行
以下内容配置:控制台日志全部输出到文件、控制台console
import logging
LOGGING = {
'version': 1, # 指明dictConnfig的版本,目前就只有一个版本
'disable_existing_loggers': False, # 表示是否禁用所有的已经存在的日志配置
'formatters': { # 格式器
'verbose': {
'format': '[%(asctime)s] [%(levelname)s] %(module)s %(process)s %(thread)s %(message)s',
},
'standard': { # 标准
'format': '[%(asctime)s] [%(levelname)s] %(message)s',
},
},
# 'filters':{},
'handlers': { # 处理器,在这里定义了两个个处理器. 用来定义具体处理日志的方式,可以定义多种,"default"就是默认方式,"console"就是打印到控制台方式。files是写入到文件的方式,注意使用的class不同
'files': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': './log/run.armand.info.log', # 日志输出文件
'formatter': 'verbose', # 指定formatters日志格式
'maxBytes': 1024*1024*5, # 文件大小
'encoding': 'utf-8',
},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'default': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': './log/all/all.log', # 日志输出文件
'formatter': 'standard', # 使用哪种formatters日志格式
# 'maxBytes': 1024*1024*5, # 文件大小 class为logging.FileHandler时不能设置文件大小
'encoding': 'utf-8',
},
},
'loggers': { # log记录器,配置之后就会对应的输出日志
'django': { # django记录器,它将所有 INFO 或更高等级的消息传递给3个处理程序——files、console 和 default
'handlers': ['files', 'console', 'default'], # 同时输出到console和文件
'level': 'INFO',
'propagate': True, # 向上接受更高级别日志
},
}
}
2. logging模块使用:
logger = logging.getLogger('django')
logger.info('%s 进入帮助页面', request.user.username)



