首页 > 技术文章 > python中的logging模块

jeff-z-blog 2019-05-23 20:43 原文

研究了好些天的logging模块,今天终于能用稍微清晰一点的思路记录一下了~~~

一、root  logger

import logging

logging.debug('这是debug')
logging.info('这是info')
logging.warning('这是warning')
logging.error('这是error')
logging.critical('这是critical')

最后结果是:控制台输出warning、error、critical级别的日志

这是warning
这是error
这是critical

日志输出说明3个问题:

1、日志默认level是warning

2、未配置formater时,日志直接输出内容(message),不进行格式拼接

3、日志默认的handler是StreamHandler 

level的级别排序为CRITICAL > ERROR > WARNING > INFO > DEBUG

定义的记录级别越低,信息越多,级别越高,信息越少

直接使用logging输出日志时,默认创建的就是root logger

二、basicConfig方法配置logging记录格式

basciConfig配置记录的几种格式参数:

其中format参数用来设置日志输出格式,日志输出格式的配置参数如下:

level参数用来设置默认的root logger的level

format和level的设置方式如下:

logging.basicConfig(level=logging.INFO,format="%(asctime)s %(thread)d %(message)s")

logging.info('已经配置basicConfig')

输出如下:

2011-08-31 19:18:29,81 - 24631 - 已经配置basicConfig

三、logger类

root  logger

root = logging.getLogger() 

parent logger

logger = logging.getLogger('s') 

child logger

logger_child = logging.getLogger('s.s1')

logger的类关系通过“.”进行设置,name相同,logger唯一相同

通常使用方法:

root = logging.getLogger()
root.setLevel(logging.INFO)
sh = logging.StreamHandler()
sh.setLevel(logging.WARNING)
sh.setFormatter(logging.Formatter('%(asctime)s - %(message)s'))
root.addHandler(sh)
root.warning('这是log')

logger输出日志时,因为logger和handler均有level,所以,日志的level要先与logger的level进行比较,大于logger的level才能与handler的level进行比较,大于handler的level才能输出到对应的位置,若小于handler的level,则当前logger不输出,若日志的level直接小于logger的level,那么当前logger直接不输入日志,无需再进行后边的比较

 

参数propagate

默认参数propagate的参数值为true,及当前logger打印日志输出之后,还需要将日志传入到所有父节点和根节点进行打印输出,所修改propagate为false,则当前级别logger的日志不再向上级进行传输

 

参考文章:

[Python 模块] logging模块、Logger类

使用python的logging模块

python中logging模块的一些简单用法

使用python的logging模块

 

推荐阅读