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")
转载于:https://www.cnblogs.com/gxfaxe/p/10858164.html
python写入日志文件时日志内容重复写入相关推荐
- python 爬虫输出为空,python爬取文件时,内容为空
解决方式: img_res = requests.get(src,headers=header) 在header中加上referer防盗链 加上防盗链header的例子: header = {&quo ...
- cad安装日志文件发生错误_安装软件提示“打开安装日志文件时发生错误”解决办法...
最近有朋友在安装loadrunner时发生报错,windows installer报错:打开安装日志文件时发生错误.请检查指定的日志文件位置是否存在并且可以写入. 造成报错的原因就是他之前安装过一次l ...
- 20190829王老师发的面试题1、有一个日志文件access.log,内容如下
1.有一个日志文件access.log,内容如下 09:28:59 404 2003356554 09:29:00 200 2003232321 09:30:00 300 2003232321 09: ...
- 用python将txt文件中的内容导入到excel文件中
背景 日志文件中的内容不方便阅读统计,需要用excel表格的形式显示出来 日志文件内容如下: info***LCAM_SC.DM_RP_DIS_DEVICE_TEMP*1*1*0*0*0*0*N*Y* ...
- 在python中读取文件时如何去除行末的换行符以及在Windows与Linux中的区别
[时间]2018.11.14 [题目]在python中读取文件时如何去除行末的换行符以及在Windows与Linux中的区别 一.去除换行符 以使用readline进行读取为例: import red ...
- python读txt文件时末尾许多空格-python读取txt文件时去掉空格的方法
python读取txt文件时去掉空格的方法 发布时间:2020-09-22 14:15:44 来源:亿速云 阅读:85 作者:小新 这篇文章给大家分享的是有关python读取txt文件时去掉空格的方法 ...
- python无法打开文件filenotfounderror_解决Python在导入文件时的FileNotFoundError问题
例如,在运行这段代码时 from keras.utils import plot_model plot_model(model, to_file='images/model_mnist.png', s ...
- python关闭csv文件_使用Python编辑csv文件时跳过标题
使用Python编辑csv文件时跳过标题 我使用下面引用的代码使用Python编辑csv.代码中调用的函数形式代码的上半部分. 问题:我希望下面引用的代码从第2行开始编辑csv,我希望它排除包含标题的 ...
- python中csv文件通过什么表示字符_python_写入csv文件时候无法进行原样写入(写入字符串中出现逗号,时候,csv文件自动分成两个单元格)...
问题描述: 写入csv文件时候无法进行原样写入(写入字符串中出现逗号","时候,csv文件自动分成两个单元格) with open("test.csv",&qu ...
- python csv文件复制时的编码问题_使用python读取CSV文件时的编码问题
尝试使用python读取CSV文件时遇到障碍. 更新:如果只想跳过字符或错误,可以打开文件,如下所示: with open(os.path.join(directory, file), 'r', en ...
最新文章
- R语言可视化包ggplot2改变图例(legend)标签实战
- 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part 2
- 一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器
- 网页文字对齐(CSS)
- Linux 发行版与Linux内核
- SPI动态加载配置文件
- Windows 2003 NTP 时间服务器设置
- cocos3.2中如何创建一个场景
- fin.is_open()与fin.open()
- 树莓派怎么切换输入法_树莓派如何安装中文输入法
- ffmpeg视频格式转换
- 英文版软件工程试题模拟试题
- 处理安全检查的项目代码异常解决记录
- 大学到底教会了我们什么?
- TIA protal与SCL从入门到精通(2)——EN/ENO 机制
- C#执行js中的函数的问题,以sohu邮箱登陆密码js的MD5为例
- Vue 实现下拉加载更多
- Cesium 监听地图缩放
- 2022.7.14 花旗银行外包面试
- 在低谷期应该做点什么
热门文章
- java 镶嵌创建线程_请教一个 Java 多线程嵌套使用的问题
- python中数据处理的格式,json.csv txt excel
- jQuery 鼠标事件
- python检测excel是否打开_Python: 如何判断远程服务器上Excel文件是否被人打开
- 查看总耗时_讲真,我为什么劝你别总加班。
- 基于FaceNet人脸识别的人脸对比认证(一) -- 环境部署、认证实验
- Python机器学习库——Sklearn
- “死”法不重样,一根数据线如何从“机器伴侣”变身电脑杀手?...
- Chapter 1 First Sight——13
- WordPress 实用SEO插件总结