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")

转载于:https://www.cnblogs.com/gxfaxe/p/10858164.html

python写入日志文件时日志内容重复写入相关推荐

  1. python 爬虫输出为空,python爬取文件时,内容为空

    解决方式: img_res = requests.get(src,headers=header) 在header中加上referer防盗链 加上防盗链header的例子: header = {&quo ...

  2. cad安装日志文件发生错误_安装软件提示“打开安装日志文件时发生错误”解决办法...

    最近有朋友在安装loadrunner时发生报错,windows installer报错:打开安装日志文件时发生错误.请检查指定的日志文件位置是否存在并且可以写入. 造成报错的原因就是他之前安装过一次l ...

  3. 20190829王老师发的面试题1、有一个日志文件access.log,内容如下

    1.有一个日志文件access.log,内容如下 09:28:59 404 2003356554 09:29:00 200 2003232321 09:30:00 300 2003232321 09: ...

  4. 用python将txt文件中的内容导入到excel文件中

    背景 日志文件中的内容不方便阅读统计,需要用excel表格的形式显示出来 日志文件内容如下: info***LCAM_SC.DM_RP_DIS_DEVICE_TEMP*1*1*0*0*0*0*N*Y* ...

  5. 在python中读取文件时如何去除行末的换行符以及在Windows与Linux中的区别

    [时间]2018.11.14 [题目]在python中读取文件时如何去除行末的换行符以及在Windows与Linux中的区别 一.去除换行符 以使用readline进行读取为例: import red ...

  6. python读txt文件时末尾许多空格-python读取txt文件时去掉空格的方法

    python读取txt文件时去掉空格的方法 发布时间:2020-09-22 14:15:44 来源:亿速云 阅读:85 作者:小新 这篇文章给大家分享的是有关python读取txt文件时去掉空格的方法 ...

  7. python无法打开文件filenotfounderror_解决Python在导入文件时的FileNotFoundError问题

    例如,在运行这段代码时 from keras.utils import plot_model plot_model(model, to_file='images/model_mnist.png', s ...

  8. python关闭csv文件_使用Python编辑csv文件时跳过标题

    使用Python编辑csv文件时跳过标题 我使用下面引用的代码使用Python编辑csv.代码中调用的函数形式代码的上半部分. 问题:我希望下面引用的代码从第2行开始编辑csv,我希望它排除包含标题的 ...

  9. python中csv文件通过什么表示字符_python_写入csv文件时候无法进行原样写入(写入字符串中出现逗号,时候,csv文件自动分成两个单元格)...

    问题描述: 写入csv文件时候无法进行原样写入(写入字符串中出现逗号","时候,csv文件自动分成两个单元格) with open("test.csv",&qu ...

  10. python csv文件复制时的编码问题_使用python读取CSV文件时的编码问题

    尝试使用python读取CSV文件时遇到障碍. 更新:如果只想跳过字符或错误,可以打开文件,如下所示: with open(os.path.join(directory, file), 'r', en ...

最新文章

  1. R语言可视化包ggplot2改变图例(legend)标签实战
  2. 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part 2
  3. 一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器
  4. 网页文字对齐(CSS)
  5. Linux 发行版与Linux内核
  6. SPI动态加载配置文件
  7. Windows 2003 NTP 时间服务器设置
  8. cocos3.2中如何创建一个场景
  9. fin.is_open()与fin.open()
  10. 树莓派怎么切换输入法_树莓派如何安装中文输入法
  11. ffmpeg视频格式转换
  12. 英文版软件工程试题模拟试题
  13. 处理安全检查的项目代码异常解决记录
  14. 大学到底教会了我们什么?
  15. TIA protal与SCL从入门到精通(2)——EN/ENO 机制
  16. C#执行js中的函数的问题,以sohu邮箱登陆密码js的MD5为例
  17. Vue 实现下拉加载更多
  18. Cesium 监听地图缩放
  19. 2022.7.14 花旗银行外包面试
  20. 在低谷期应该做点什么

热门文章

  1. java 镶嵌创建线程_请教一个 Java 多线程嵌套使用的问题
  2. python中数据处理的格式,json.csv txt excel
  3. jQuery 鼠标事件
  4. python检测excel是否打开_Python: 如何判断远程服务器上Excel文件是否被人打开
  5. 查看总耗时_讲真,我为什么劝你别总加班。
  6. 基于FaceNet人脸识别的人脸对比认证(一) -- 环境部署、认证实验
  7. Python机器学习库——Sklearn
  8. “死”法不重样,一根数据线如何从“机器伴侣”变身电脑杀手?...
  9. Chapter 1 First Sight——13
  10. WordPress 实用SEO插件总结