色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

python控制臺打印log輸出重復(fù)的解決方法

瀏覽:48日期:2022-06-19 16:55:44

在我們使用log模塊輸出日志時,經(jīng)常會遇到log輸出重復(fù)的問題,如下:

先來看這個文件log.py的代碼:

代碼示例: ’’’功能描述:實現(xiàn)控制臺和文件同時記錄日志的功能編寫人:超哥編寫日期:步驟分析: 1-配置日志記錄器名稱 2-配置日志級別 3-配置日志格式(可以分別設(shè)置,也可以統(tǒng)一設(shè)置) 4-創(chuàng)建并添加handler-控制臺 5-創(chuàng)建并添加handler-文件 6-提供對外獲取logger’’’ import loggingimport sys def log(): # 1 - 配置日志記錄器名稱 logger = logging.getLogger(’AutoTest’) # 2-配置日志級別 logger.setLevel(logging.DEBUG) # 3-配置日志格式(可以分別設(shè)置,也可以統(tǒng)一設(shè)置) format = logging.Formatter(’%(name)s-%(asctime)s-%(message)s’) # 4 - 創(chuàng)建并添加handler - 控制臺 sh = logging.StreamHandler() sh.setFormatter(format) logger.addHandler(sh) # 5 - 創(chuàng)建并添加handler - 文件 fh = logging.FileHandler(’test.log’) fh.setFormatter(format) logger.addHandler(fh) # 6 - 提供對外獲取logger return logger if __name__ == ’__main__’: logger = log() logger.info(’使用函數(shù)定義的log方法’)

我們在同一目錄下創(chuàng)建另外一個文件:

在我們導(dǎo)入寫好的log.py文件

from xx目錄 import log log().info(’xxx1’) log().info(’xxx2’) log().info(’xxx3’)

輸出:

python控制臺打印log輸出重復(fù)的解決方法

這個結(jié)果什么鬼?明明三句話,打印出來這么多,這其實是log在使用的常遇到的坑,通過debug你會發(fā)現(xiàn),每次調(diào)用都會創(chuàng)建句柄,所以重復(fù),如圖:

第一句調(diào)用之后,handlers里面已經(jīng)存在了兩個handler,分別是控制臺句柄StreamHandler和文件句柄FileHandler,下面圖中是第二句調(diào)用添加句柄

python控制臺打印log輸出重復(fù)的解決方法

執(zhí)行后會發(fā)現(xiàn)handlers里面多了一個StreamHandler

python控制臺打印log輸出重復(fù)的解決方法

怎么解決這種情況,有兩個方案,咱們分別列出兩種方案代碼:

第一種,第一使用單例模式,在log.py文件中增加一行:logger = log() ,這句的作用就是提前實例化好對象,其他模塊使用都適用該對象,所以別的模塊導(dǎo)入語句要改成:from xxx包.log import logger ,然后使用logger.info(’xxxx’) 輸出日志即可

……省略上方代碼

# 6 - 提供對外獲取logg的方法 return logger #增加一行 logger = log() if __name__ == ’__main__’: logger = log() logger.info(’使用函數(shù)定義的log方法’)

導(dǎo)入:

from xx包 import logger logger.info(’xxx1’) logger.info(’xxx2’) logger.info(’xxx3’)

輸出:

python控制臺打印log輸出重復(fù)的解決方法

第二個方案:log.py每次判斷handlers是否已存在

…… # 4 - 創(chuàng)建并添加handler - 控制臺 sh = logging.StreamHandler() sh.setFormatter(format) # 5 - 創(chuàng)建并添加handler - 文件 fh = logging.FileHandler(’test.log’) fh.setFormatter(format) #在新增handler時判斷是否為空 if not logger.handlers: logger.addHandler(sh) logger.addHandler(fh) # 6 - 提供對外獲取logg的方法 return logger if __name__ == ’__main__’: logger = log() logger.info(’使用函數(shù)定義的log方法’)

導(dǎo)入文件代碼保持不變:

from xx包 import log log().info(’xxx1’) log().info(’xxx2’) log().info(’xxx3’)

輸出:

python控制臺打印log輸出重復(fù)的解決方法

針對面向?qū)ο蟮姆桨竿瑯邮且陨蟽蓚€,請自行解決

總結(jié)

到此這篇關(guān)于python控制臺打印log輸出重復(fù)解決的文章就介紹到這了,更多相關(guān)python打印log重復(fù)內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 亚洲小视频在线播放 | 欧美在线一区二区 | 久久草在线视频 | 亚洲国产精品一区二区第四页 | 国产精品久久久久久久免费大片 | 一级a爰片久久毛片 | 国产三级网| 一级黄色毛片免费看 | 色香欲综合成人免费视频 | 欧美精品一区二区三区在线 | 国产高清在线精品二区一 | 色综合在| 国产精品一区在线观看 | 影音先锋色先锋女同另类 | 欧美乱爱| 国产亚洲精品线观看77 | 成人a视频在线观看 | 日韩午夜免费视频 | 成人爽a毛片在线视频网站 成人爽爽大片在线观看 | 大片国产片日本观看免费视频 | 日本高清乱偷www | 国产日产亚洲系列首页 | 成人亚洲视频在线观看 | 国产成人美女福利在线观看 | 国产一区中文字幕在线观看 | 国产午夜精品久久久久小说 | 中文字幕在线日韩 | 最近最新中文字幕免费的一页 | 国产精品变态重口在线 | 亚洲综合成人网在线观看 | 久草视频手机在线观看 | 精品国产自在现线看久久 | 国产猛烈无遮掩视频免费网站男女 | 国产aⅴ一区二区三区 | 久久99精品久久只有精品 | 午夜性刺激免费视频观看不卡专区 | 成年网站在线在免费播放 | 久久久久久久久久久视频国内精品视频 | 精品日本久久久久久久久久 | 日本污网站 | 免费高清在线爱做视频 |