Python日志模块

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("警告信息")

总结

  • 知识点模块化
  • 知识点粒度化
  • 每天一点点,终成汪洋大海
原文地址:https://www.cnblogs.com/brightyuxl/p/11251336.html