logging模块用于输出运行日志,可以设置不同的日志等级,保存信息到日志文件中等。 相比print()函数,logging可以设置日志的等级,控制在发布版本中的输出内容,并且可以指定日志的输出格式。
下面通过一段代码迅速上手:
import logging
logging.basicConfig() # 使用默认配置
logging.debug("调试信息")
logging.info("普通日志信息")
logging.warning("警告信息")
logging.error("错误信息")
logging.critical("致命错误")
输出结果如下:
WARNING:root:警告信息
ERROR:root:错误信息
CRITICAL:root:致命错误
使用 basicConfig() 方法已经能够满足基本的使用需要,如果这个方法没有传入参数,会根据默认的配置创建日志Logger 对象,默认的日志级别被设置为 WARNING,所以调试信息、普通信息并没有打印。配置函数可选的参数在下面的表格中详细列出:
设定相关参数后的代码如下:
# 设置打印日志级别:CRITICAL(严重的) > ERROR > WARNING > INFO > DEBUG
logging.basicConfig(
level=logging.DEBUG,
filename="log.log",
filemode="w",
format="%(asctime)s - %(name)s - %(filename)s [line:%(lineno)d] - %(levelname)s - %(message)s"
)
logging.debug("调试信息")
logging.info("普通日志信息")
logging.warning("警告信息")
logging.error("错误信息")
logging.critical("致命错误")
打印格式format的常用格式如下:
更加详细的变量及说明可以参考官方文档:
https://docs.python.org/zh-cn/3.8/library/logging.html#logrecord-attributes
需要注意的是,当发生异常时,直接使用无参方法debuge()、warning()、error()、critical()方法是无法记录日志信息的,需要设置exc_info参数为True。下面给出参考代码:
import logging
logging.basicConfig(
level=logging.DEBUG,
filename="log.log",
filemode="w",
format="%(asctime)s - %(name)s - %(filename)s [line:%(lineno)d] - %(levelname)s - %(message)s"
)
try:
result = 10 / 0
except Exception as ex:
logging.exception("除数为零异常") # 推荐使用,不需要手动设置True
logging.error("除数为零异常", exc_info=True)
logging.log(level=logging.DEBUG, msg="除数为零异常", exc_info=True)