研究了好些天的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的日志不再向上级进行传输
参考文章: