• python写入日志文件时日志内容重复写入


    python写入日志文件时日志内容重复写入:原因handler未移除,导致重复写入

    问了度娘之后,大概搞明白了,就是你第二次调用log的时候,根据getLogger(name)里的name获取同一个logger,而这个logger里已经有了第一次你添加的handler,第二次调用又添加了一个handler,所以,这个logger里有了两个同样的handler,以此类推,调用几次就会有几个handler。。

    修改前代码:

     1 # coding:utf-8
     2 import logging
     3 from logging import handlers
     4 
     5 
     6 class Logger():
     7     level_relations = {"debug": logging.DEBUG, "info": logging.INFO, "warning": logging.WARNING,
     8                        "error": logging.ERROR, "critical": logging.CRITICAL,}
     9     fmt_str = "%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s:%(message)s"
    10     def __init__(self, filename, level="info", when="D", backCount=2, fmt=fmt_str):
    11         self.logger = logging.getLogger(filename)
    12         format_str = logging.Formatter(fmt)
    13         self.logger.setLevel(self.level_relations.get(level))
    14         self.th = handlers.TimedRotatingFileHandler(filename, when=when, backupCount=backCount, encoding="utf-8")
    15         self.th.setFormatter(format_str)
    16 
    17     def log_write(self, log_text, level="info"):
    18         self.logger.addHandler(self.th)
    19         if level == "debug" or level == "DEBUG":
    20             self.logger.debug(log_text)
    21         elif level == "info" or level == "INFO":
    22             self.logger.info(log_text)
    23         elif level == "warning" or level == "WARNING":
    24             self.logger.warning(log_text)
    25         elif level == "error" or level == "ERROR":
    26             self.logger.error(log_text)
    27         elif level == "critical" or level == "CRITICAL":
    28             self.logger.critical(log_text)
    29         else:
    30             raise ("日志级别错误")
    31 
    32 
    33 if __name__ == '__main__':
    34     log1 = Logger("text.log")
    35     log1.log_write("test4-0")
    36     log2 = Logger("text.log")
    37     log2.log_write("test4-1")
    38     log3 = Logger("text.log")
    39     log3.log_write("test4-2")

    执行结果:

    文件中日志内容打印了多次

    修改后的代码:

     1 # coding:utf-8
     2 import logging
     3 from logging import handlers
     4 
     5 
     6 class Logger():
     7     level_relations = {"debug": logging.DEBUG, "info": logging.INFO, "warning": logging.WARNING,
     8                        "error": logging.ERROR, "critical": logging.CRITICAL,}
     9     fmt_str = "%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s:%(message)s"
    10     def __init__(self, filename, log_text, level="info", when="D", backCount=2, fmt=fmt_str):
    11         self.logger = logging.getLogger(filename)
    12         format_str = logging.Formatter(fmt)
    13         self.logger.setLevel(self.level_relations.get(level))
    14         self.th = handlers.TimedRotatingFileHandler(filename, when=when, backupCount=backCount, encoding="utf-8")
    15         self.th.setFormatter(format_str)
    16 
    17     def log_write(self, log_text, level="info"):
    18         self.logger.addHandler(self.th)
    19         if level == "debug" or level == "DEBUG":
    20             self.logger.debug(log_text)
    21         elif level == "info" or level == "INFO":
    22             self.logger.info(log_text)
    23         elif level == "warning" or level == "WARNING":
    24             self.logger.warning(log_text)
    25         elif level == "error" or level == "ERROR":
    26             self.logger.error(log_text)
    27         elif level == "critical" or level == "CRITICAL":
    28             self.logger.critical(log_text)
    29         else:
    30             raise ("日志级别错误")
    31         self.logger.removeHandler(self.th)  # 日志写入完成后移除handler
    32 
    33 
    34 if __name__ == '__main__':
    35     log = Logger("text.log", "test4-1")
    36     log = Logger("text.log", "test4-2")
    37     log = Logger("text.log", "test4-3")
  • 相关阅读:
    论文解读(GraphBert)《GraphBert: Only Attention is Needed for Learning Graph Representations》 Learner
    论文解读(SCAGC)《Selfsupervised Contrastive Attributed Graph Clustering》 Learner
    论文解读(AGE)《Adaptive Graph Encoder for Attributed Graph Embedding》 Learner
    tqdm介绍及常用方法 Learner
    论文解读(SCGC)《SCGC : SelfSupervised Contrastive Graph Clustering》 Learner
    论文解读《Strategies for Pretraining Graph Neural Networks》 Learner
    论文解读(FDGATII)《FDGATII : Fast Dynamic Graph Attention with Initial Residual and Identity Mapping》 Learner
    论文解读(GMIM)《Deep Graph Clustering via Mutual Information Maximization and Mixture Model》 Learner
    论文解读《Bilinear Graph Neural Network with Neighbor Interactions》 Learner
    AcWing 524. 愤怒的小鸟
  • 原文地址:https://www.cnblogs.com/gxfaxe/p/10858164.html
Copyright © 2020-2023  润新知