python之logging日志模块基础用法总结
logging模块是python中内置的标准模块,通常用于输出脚本运行日志,同时还可以设置输出日志的等级、日志保存路径、日志文件回滚等
基础实例
首先通过一个简单的实例,来了解logging模块的基础用法:
- 首先引入logging模块
- 然后利用basicConfig配置level信息format信息
- 接着声明一个Logger对象,是日志输出的主类
- 最后使用上述声明的Logger对象,调用info()方法就可以输出INFO级别的日志信息,调用debug方法可以输出DEBUG级别的日志信息
# 导入logging包
import logging
# 设置配置信息
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 定义日志名称getLogger
logger = logging.getLogger("log_demo")
# info debug warning
logger.info('info')
logger.debug('debug')
logger.warning('warning')
运行后,打印如下日志信息:
2021-02-22 22:55:21,683 - log_demo - INFO - info
2021-02-22 22:55:21,695 - log_demo - WARNING - warning
从打印结果,我们很容易就会发现logger.debug的日志信息,并没有打印出来,这到底是为什么呢? 这就需要关注到上面提到的level信息了
日志级别
logging模块中level信息,有以下五类:
- CRITICAL:致命错误,软件可能无法运行
- ERROR:严重错误,软件可能无法运行某些功能
- WARNING:警告信息,软件还能按预期运行
- INFO:确认一切是否按预期运行
- DEBUG:详细的信息,常用于诊断问题
- NOTSET:不设置level
接下来,再通过一个实例感受一下:
# 导入logging包
import logging
# 设置配置信息
logging.basicConfig(level=logging.DEBUG,
filename='output.log',
datefmt='%Y/%m/%d %H:%M:%S',
format='%(asctime)s - %(name)s - %(levelname)s -%(lineno)s -%(module)s - %(message)s')
# 定义日志名称getLogger
logger = logging.getLogger("log_demo")
# info debug warning
logger.info('info')
logger.debug('debug')
logger.warning('warning')
该实例与第一个实例相比,有三点变化:
- 通过filename指定了输出日志文件output.log用于记录生成的日志信息
- 通过datefmt指定了日期的输出格式
- 通过%(lineno)s和%(module)s, 在日志记录中,打印日志的当前行号和模块名称
生成的日志文件output.log内容如下:
2021/02/23 22:10:49 - log_demo - INFO -15 -log_example - info
2021/02/23 22:10:49 - log_demo - DEBUG -16 -log_example - debug
2021/02/23 22:10:49 - log_demo - WARNING -17 -log_example - warning
从日志内容,我们能够看到,当level信息为DEBUG时,三条日志均打印出来了,这是因为日志级别是有等级高低排序的:
CRITICAL > ERROR > WARNING > INFO > DEBUG
可以这样理解,logging模块在打印模块时,不会打印比当前level等级低的内容,例如我们设置了输出日志 level 为 INFO,只会输出级别大于等于 INFO 的日志,如 WARNING、ERROR 等,而DEBUG 和 NOSET 级别的不会输出。