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 级别的不会输出。

posted @ 2021-02-23 23:01  woft王  阅读(212)  评论(0)    收藏  举报