python之停止打印日志/重复打印日志方式

 更新时间:2023年09月13日 14:47:14   作者:weixin_41956627  
这篇文章主要介绍了python停止打印日志/重复打印日志方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python停止打印日志/重复打印日志

问题描述

用类实现了一个需求,每次实例化时,会根据传入的参数,在不同的日志文件中写入日志,即要求类的每个实例根据传参写入不同的日志文件。

运行后发现 ,运行到根据c2配置的实例 时,c2实例的日志出现在了c1的日志文件中,控制台日志也是重复的,即使把实例 del 删除也还是会打印重复日志。

主要代码如下:

class KKK
	def __init__(self, log_name, base_path)
	    self.log_name= log_name
	    self.base_path = base_path
	def start():
	    ....
	    pass
    def getLogger(self):
        # logger = logging.getLogger('%s_%d' % (self.log_name, int(time.time())))
        logger = logging.getLogger()
        logger.setLevel(logging.DEBUG)
        formatter = logging.Formatter("%(asctime)s|%(lineno)04d|%(levelname)-8s|%(message)s")
        # 控制台日志
        StreamHandler = logging.StreamHandler()
        StreamHandler.setFormatter(formatter)
        StreamHandler.setLevel(logging.INFO)
        # 较详细的日志
        FileHandler = logging.FileHandler(filename=os.path.join(self.base_path, '%s.log' % self.log_name), mode='a', encoding='utf8')
        FileHandler.setFormatter(formatter)
        FileHandler.setLevel(logging.DEBUG)
        logger.addHandler(StreamHandler)
        logger.addHandler(FileHandler)
        return logger
if __name__ == '__main__':
    c1 = {...}
    c2 = {...}
    for cc in [c1, c2]:
        kkk = KKK(**cc)
        kkk.start()

问题原因

logging.getLogger( ), 并未传递参数, 所以得到的self.logger是RootLogger。

RootLogger是一个python程序内全局唯一的,所有Logger对象的父类,对RootLogger的设定,均会影响到后续的日志。

解决办法

方法1

getLogger设置参数

logger = logging.getLogger('%s_%d' % (self.course_name, int(time.time())))

方法2

类实例销毁前清空log.handlers

    def __del__(self):
        self.stopLogger()
        pass
    def stopLogger(self):
        # for fh in self.logger.handlers:
        #     print(fh.get_name, '+++++')
        #     if isinstance(fh, logging.FileHandler):
        #         print('close handler')
        #         fh.close()
        self.logger.warning('关闭日志, %s , %s' % (self.course_name, self.logger.name))
        self.logger.handlers.clear()
        pass

python程序中断时,输出打印日志

在class中添加一个方法

def __del__(self):
     dbg.info("exit")

亲测有效!!!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python列表创建与销毁及缓存池机制

    Python列表创建与销毁及缓存池机制

    这篇文章主要介绍了Python列表创建与销毁及缓存池机制,文章基于python展开对列表创建与销毁内容的展开,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 利用Python库Scapy解析pcap文件的方法

    利用Python库Scapy解析pcap文件的方法

    今天小编就为大家分享一篇利用Python库Scapy解析pcap文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python正则表达式使用范例分享

    Python正则表达式使用范例分享

    本文给大家总结了7个常用的Python正则表达式的使用范例以及简单解释分析,有需要的小伙伴可以参考下
    2016-12-12
  • python钉钉机器人运维脚本监控实例

    python钉钉机器人运维脚本监控实例

    今天小编就为大家分享一篇python钉钉机器人运维脚本监控实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python基于链接表实现无向图最短路径搜索

    Python基于链接表实现无向图最短路径搜索

    链接表的存储相比较邻接炬阵,使用起来更方便,对于空间的使用是刚好够用原则,不会产生太多空间浪费。所以本文将以链接表方式实现无向图最短路径搜索,需要的可以参考一下
    2022-04-04
  • 最新anaconda安装配置教程

    最新anaconda安装配置教程

    Anaconda是一个开源的Python发行版本,包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,这篇文章主要介绍了最新anaconda安装配置教程,需要的朋友可以参考下
    2023-04-04
  • Python提取网页中超链接的方法

    Python提取网页中超链接的方法

    很多人在一开始学习Python,会打算用作爬虫开发。既然要做爬虫,首先就要抓取网页,并且从网页中提取出超链接地址。这篇文章给大家分享一个简单的方法,有需要的可以参考借鉴。
    2016-09-09
  • Python随机读取文件实现实例

    Python随机读取文件实现实例

    这篇文章主要介绍了Python随机读取文件的相关资料,需要的朋友可以参考下
    2017-05-05
  • 简单实现python聊天程序

    简单实现python聊天程序

    这篇文章主要为大家详细介绍了python实现简单聊天程序的相关代码,包括客户端和服务端,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • python如何通过注册表动态管理组件

    python如何通过注册表动态管理组件

    使用注册表的主要优势是可以在运行时动态创建对象,从而实现高度可配置和可扩展的设计,这篇文章主要介绍了python如何通过注册表动态管理组件,需要的朋友可以参考下
    2024-05-05

最新评论