电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python logging 重復寫日志問題解決辦法詳解

瀏覽:97日期:2022-07-15 10:21:51

python logging 重復寫日志問題

用Python的logging模塊記錄日志時,遇到了重復記錄日志的問題,第一條記錄寫一次,第二條記錄寫兩次,第三條記錄寫三次。。。很頭疼,這樣記日志可不行。網上搜索到了原因與解決方案:

原因:沒有移除handler 解決:在日志記錄完之后removeHandler

修改前示例代碼:

import loggingdef log(message): logger = logging.getLogger(’testlog’) streamhandler = logging.StreamHandler() streamhandler.setLevel(logging.ERROR) formatter = logging.Formatter(’%(asctime)s - %(levelname)s - %(name)s - %(message)s’) streamhandler.setFormatter(formatter) logger.addHandler(streamhandler) logger.error(message)if __name__ == ’__main__’: log(’hi’) log(’hi too’) log(’hi three’)

修改前輸出結果:

2016-07-08 09:17:29,740 - ERROR - testlog - hi 2016-07-08 09:17:29,740 - ERROR - testlog - hi too 2016-07-08 09:17:29,740 - ERROR - testlog - hi too 2016-07-08 09:17:29,740 - ERROR - testlog - hi three 2016-07-08 09:17:29,740 - ERROR - testlog - hi three 2016-07-08 09:17:29,740 - ERROR - testlog - hi three

修改后示例代碼:

import loggingdef log(message): logger = logging.getLogger(’testlog’) streamhandler = logging.StreamHandler() streamhandler.setLevel(logging.ERROR) formatter = logging.Formatter(’%(asctime)s - %(levelname)s - %(name)s - %(message)s’) streamhandler.setFormatter(formatter) logger.addHandler(streamhandler) logger.error(message) # 添加下面一句,在記錄日志之后移除句柄 logger.removeHandler(streamhandler)if __name__ == ’__main__’: log(’hi’) log(’hi too’) log(’hi three’)

修改后輸出結果:

2016-07-08 09:32:28,206 - ERROR - testlog - hi 2016-07-08 09:32:28,206 - ERROR - testlog - hi too 2016-07-08 09:32:28,206 - ERROR - testlog - hi three

深度解析:

Google之后,大概搞明白了,就是你第二次調用log的時候,根據getLogger(name)里的name獲取同一個logger,而這個logger里已經有了第一次你添加的handler,第二次調用又添加了一個handler,所以,這個logger里有了兩個同樣的handler,以此類推,調用幾次就會有幾個handler。。

所以這里有以下幾個解決辦法:

每次創建不同name的logger,每次都是新logger,不會有添加多個handler的問題。(ps:這個辦法太笨,不過我之前就是這么干的。。) 像上面一樣每次記錄完日志之后,調用removeHandler()把這個logger里的handler移除掉。在log方法里做判斷,如果這個logger已有handler,則不再添加handler。 與方法2一樣,不過把用pop把logger的handler列表中的handler移除。

下面是方法3與方法4的代碼示例:

方法3:

import loggingdef log(message): logger = logging.getLogger(’testlog’) # 這里進行判斷,如果logger.handlers列表為空,則添加,否則,直接去寫日志 if not logger.handlers: streamhandler = logging.StreamHandler() streamhandler.setLevel(logging.ERROR) formatter = logging.Formatter(’%(asctime)s - %(levelname)s - %(name)s - %(message)s’) streamhandler.setFormatter(formatter) logger.addHandler(streamhandler) logger.error(message)if __name__ == ’__main__’: log(’hi’) log(’hi too’) log(’hi three’)

方法4:

import loggingdef log(message): logger = logging.getLogger(’testlog’) streamhandler = logging.StreamHandler() streamhandler.setLevel(logging.ERROR) formatter = logging.Formatter(’%(asctime)s - %(levelname)s - %(name)s - %(message)s’) streamhandler.setFormatter(formatter) logger.addHandler(streamhandler) logger.error(message) # 用pop方法把logger.handlers列表中的handler移除,注意如果你add了多個handler,這里需多次pop,或者可以直接為handlers列表賦空值 logger.handlers.pop() # logger.handler = []if __name__ == ’__main__’: log(’hi’) log(’hi too’) log(’hi three’)

這幾種方法都親試可行,個人覺得方法3判斷更加優雅,你覺得呢?

到此這篇關于python logging 重復寫日志問題j解決辦法詳解的文章就介紹到這了,更多相關python logging 重復寫日志問題內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 糖衣机,除尘式糖衣机,全自动糖衣机,泰州市长江制药机械有限公司 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 大型果蔬切片机-水果冬瓜削皮机-洗菜机切菜机-肇庆市凤翔餐饮设备有限公司 | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 机械加工_绞车配件_立式离心机_减速机-洛阳三永机械厂 | 光栅尺_Magnescale探规_磁栅尺_笔式位移传感器_苏州德美达 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 升降炉_真空气氛炉_管式电阻炉厂家-山东中辰电炉有限公司 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 大米加工设备|大米加工机械|碾米成套设备|大米加工成套设备-河南成立粮油机械有限公司 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 蔬菜清洗机_环速洗菜机_异物去除清洗机_蔬菜清洗机_商用洗菜机 - 环速科技有限公司 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 置顶式搅拌器-优莱博化学防爆冰箱-磁驱搅拌器-天津市布鲁克科技有限公司 | 脉冲除尘器,除尘器厂家-淄博机械| 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | DWS物流设备_扫码称重量方一体机_快递包裹分拣机_广东高臻智能装备有限公司 | lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 金属抛光机-磁悬浮抛光机-磁力研磨机-磁力清洗机 - 苏州冠古科技 | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 温州食堂承包 - 温州市尚膳餐饮管理有限公司 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | atcc网站,sigma试剂价格,肿瘤细胞现货,人结肠癌细胞株购买-南京科佰生物 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | ★济南领跃标识制作公司★济南标识制作,标牌制作,山东标识制作,济南标牌厂 |