ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python的logging 模块的propagate设置

2022-04-27 23:04:17  阅读:345  来源: 互联网

标签:logging LOG python lab getLogger propagate 记录器 logger


代码:

import logging
import sys


LOG_FORMAT = '[%(asctime)s PID:%(process)d %(levelname)s %(filename)s %(funcName)s] %(message)s'

sh = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter(LOG_FORMAT)
sh.setFormatter(formatter)

sh2 = logging.StreamHandler(sys.stdout)
formatter2 = logging.Formatter(LOG_FORMAT)
sh2.setFormatter(formatter2)

sh3 = logging.StreamHandler(sys.stdout)
formatter3 = logging.Formatter(LOG_FORMAT)
sh3.setFormatter(formatter3)




lab_logger = logging.getLogger()
lab_logger.handlers = [sh]

lab_logger_2 = logging.getLogger('a')
lab_logger_2.handlers = [sh2]
# lab_logger_2.propagate=False

lab_logger_3 = logging.getLogger('a.b')
lab_logger_3.handlers = [sh3]
# lab_logger_3.propagate=False


lab_logger_3.warning('xxxxxxxxxxxxxxxxxxxxx')

运行结果:

 

 

 

 

修改:

import logging
import sys


LOG_FORMAT = '[%(asctime)s PID:%(process)d %(levelname)s %(filename)s %(funcName)s] %(message)s'

sh = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter(LOG_FORMAT)
sh.setFormatter(formatter)

sh2 = logging.StreamHandler(sys.stdout)
formatter2 = logging.Formatter(LOG_FORMAT)
sh2.setFormatter(formatter2)

sh3 = logging.StreamHandler(sys.stdout)
formatter3 = logging.Formatter(LOG_FORMAT)
sh3.setFormatter(formatter3)




lab_logger = logging.getLogger()
lab_logger.handlers = [sh]

lab_logger_2 = logging.getLogger('a')
lab_logger_2.handlers = [sh2]
# lab_logger_2.propagate=False

lab_logger_3 = logging.getLogger('a.b')
lab_logger_3.handlers = [sh3]
lab_logger_3.propagate=False


lab_logger_3.warning('xxxxxxxxxxxxxxxxxxxxx')

运行结果:

 

 

 

 

 

 

 

参考官方文档:

https://docs.python.org/zh-cn/3/library/logging.html

 

 

可以知道,logging.getLogger()获得的是ROOT记录器,logging.getLogger('a')获得的是名为'a'的记录器,logging.getLogger('a.b')获得的是名为'a.b'的记录器。

从logging的记录器名称来看,从父亲到子代可以理解为:

ROOT>'a'>'a.b'

 

也就是说'a.b','a'记录器的propagate设置为False,'a.b'的记录器进行记录时同时会调用'a'记录器和ROOT记录器进行记录,于是就进行了三次记录,同理,

如果'a'记录器的propagate设置为False,'a.b'的记录器进行记录时则不会调用上层记录器,于是只记录一次。

 

 

propagate设置可以绝对下层记录器记录时是否调用上层记录器,'a.b'记录器为'a'记录器的下层且所有记录器均为ROOT记录器的下层。

 

 

 

====================================================

 

 

参考:

https://www.cnblogs.com/yangxiaolan/p/5965185.html

 

 

====================================================

 

标签:logging,LOG,python,lab,getLogger,propagate,记录器,logger
来源: https://www.cnblogs.com/devilmaycry812839668/p/16201014.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有