
在实际Python项目、工具部署时,不可能直接将所有的信息通过输出到控制台中。通常,我们会将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在出现故障时根据运行时产生的日志快速回溯、定位问题。
logging 日志级别
Python 标准库 logging 用作记录日志,默认分为六种日志级别,NOTSET、DEBUG、INFO、WARNING、ERROR、CRITICAL。
logging 参数说明
logging 使用非常简单,使用 basicConfig() 方法就能满足基本的使用需要,如果方法没有传入参数,会根据默认的配置创建Logger 对象,默认的日志级别被设置为 WARNING,该函数可选的参数如下:
参数说明:
- filename:日志输出到文件的文件名 。
- filemode: 文件模式,r[+]、w[+]、a[+] 。
- format: 日志输出的格式 。
- datefat: 日志附带日期时间的格式 。
- style: 格式占位符,默认为 "%" 和 “{}” 。
- level:设置日志输出级别 。
- stream: 定义输出流,用来初始化 StreamHandler 对象,不能 filename 参数一起使用,否则会ValueError 异常 。
- handles: 定义处理器,用来创建 Handler 对象,不能和 filename 、stream 参数一起使用,否则也会抛出 ValueError 异常 。
输出至屏幕上

如下:

输出至日志文件中
其中 format 参数支持以下格式输出:
- %(levelno)s:打印日志级别的数值
- %(levelname)s:打印日志级别的名称
- %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
- %(filename)s:打印当前执行程序名
- %(funcName)s:打印日志的当前函数
- %(lineno)d:打印日志的当前行号
- %(asctime)s:打印日志的时间
- %(thread)d:打印线程ID
- %(threadName)s:打印线程名称
- %(process)d:打印进程ID
- %(message)s:打印日志信息
如下实现将日志格式化输出至指定日志文件中。

日志内容如下:

若输出中文日志,通过handlers=[logging.FileHandler(filename, encoding="utf-8")] 参数避免中文乱码,如下

日志文件内容如下:

捕获程序异常
我们可以通过logger.error("Faild to open sklearn.txt from logger.error",exc_info = True)捕获程序异常,输出至日志文件中,如下

日志文件内容如下:

也可以使用logger.exception(msg,args),它等同于logger.error(msg,exc_info = True,args),如下:

日志文件内容如下:
