logging 模块
日志模块可以保存程序运行中需要记录的信息,特别是关键位置。及时打印日志利于理解程序运行状态。
Why use logging?
- 替代
print()
打印信息 - 利于程序管理与跟踪
那些位置需要记录日志
- 对外部系统与模块的依赖调用前后都记下日志
- 程序中重要的状态信息的变化应该记录下来,方便查问题时还原现场,推断程序运行过程
- 重要方法级或模块级。记录它的输入与输出,方便定位
- 任何业务异常都应该记下来
- else可能吞掉你的请求,或是赋予难以理解的最终结果
logging模块基本功能
- logging 模块的调用
- 保存log日志
- 调整输入日志等级
- 修改日志消息格式
logging 模块的五个等级
- DEBUG:调试信息,通常在诊断问题的时候用得着;
- INFO:普通信息,确认程序安装预期运行;
- WARNING:警告信息,表示发生了意想不到的事情,或者指示接下来可能会出现一些问题,但是程序还是继续运行;
- ERROR:错误信息,程序运行中出现了一些问题,一些功能没有执行;
- CRITICAL:危险信息,一个严重的错误,导致程序无法继续运行。
logging模块自定义记录格式
logging.basicConfig(level=logging.DEBUG, filename=filename, filemode="w", format=fmt)
参数说明:
- level 设置消息显示或者打印级别,默认级别为 warning
- filename 设置记录日志的文件名字
- filemode 设置日志追加还是从新记录的方式,默认是再次运行,新日志追加原日志之后
- format 设置日志显示格式
%(asctime)s:日志创建时的普通时间;
%(created)f:日志创建时的时间(由time.time()返回);
%(filename)s:文件名;
%(funcName)s:调用日志记录的函数;
%(levelname)s:日志消息的文本级别;
%(levelno)s:日志消息的数字级别;
%(lineno)d:调用日志消息的行号;
%(msecs)d:创建时间的毫秒部分;
%(message)s:日志消息;
%(name)s:日志器的名称;
%(pathname)s:记录日志的源文件的路径名;
%(process)d:进程ID;
%(processName)s:进程名;
%(thread)d:线程ID;
%(threadName)s:线程名;
%(relativeCreated)d:创建日志记录的时间(以毫秒为单位)
案例框架
import logging
# 记录日志的文件名字
filename = "{}.log".format("myNotes")
# 记录日志的格式
fmt = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
# 控制日志框架
logging.basicConfig(level=logging.DEBUG, filename=filename, filemode="w", format=fmt)
# 需要在代码中记录信息位置插入下列代码
logging.info("info")
logging.debug("debug")
logging.warning("warning")
logging.error("error")
logging.critical("critical")
logging.error("出现了错误")
logging.info("打印信息")
logging.warning("警告信息")
总结
- 知识点模块化
- 知识点粒度化
- 每天一点点,终成汪洋大海