使用logging封装日志
自己封装的logging,封装日志的几个组件
Logger 记录器暴露了应用程序代码直接使用的接口。
Handler 处理器将日志记录(由记录器创建)发送到适当的目标。
Filter 过滤器提供了更细粒度的功能,用于确定要输出的日志记录。
Formatter 格式器指定最终输出中日志记录的样式。
日志等级说明:
DEBUG:程序调试bug时使用
INFO:程序正常运行时使用
WARNING:程序未按预期运行时使用,但并不是错误,如:用户登录密码错误
ERROR:程序出错误时使用,如:IO操作失败
CRITICAL:特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空,一般很少使用
默认的是WARNING等级,当在WARNING或WARNING之上等级的才记录日志信息。 日志等级从低到高的顺序是: DEBUG < INFO < WARNING < ERROR < CRITICAL
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 import logging 2 3 4 def mylog(): 5 # 创建日志器 6 logger = logging.getLogger() 7 # 设置日志级别 8 logger.setLevel(logging.WARNING) 9 10 # 防止重复写日志,这里进行判断,若logger.handlers列表为空则添加 11 if not logger.handlers: 12 # 创建控制台处理器 13 sh = logging.StreamHandler() 14 # 将控制台处理器放到日志器中 15 logger.addHandler(sh) 16 17 # 创建文件处理器 18 fh = logging.FileHandler('log4.txt', encoding='utf-8') 19 # 将文件处理器放到日志器中 20 logger.addHandler(fh) 21 22 # 根据格式,创建格式器 23 fmt1 = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s" 24 formatter1 = logging.Formatter(fmt1) 25 fmt2 = "%(asctime)s - %(filename)s - %(levelname)s: %(message)s" 26 formatter2 = logging.Formatter(fmt2) 27 28 # 给控制台处理器设置格式 29 sh.setFormatter(formatter1) 30 # 给文件处理器设置格式 31 fh.setFormatter(formatter2) 32 33 return logger 34 35 36 mylog().debug("this is a debug msg") 37 mylog().info("this is a info msg") 38 mylog().warning("this is a warning msg") 39 mylog().error("this is a error msg") 40 mylog().critical("this is a critical msg")
控制台输出:
日志文件的输出: