国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

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

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

先來(lái)看這個(gè)文件log.py的代碼:

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

我們?cè)谕荒夸浵聞?chuàng)建另外一個(gè)文件:

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

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

輸出:

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

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

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

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

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

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

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

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

……省略上方代碼

# 6 - 提供對(duì)外獲取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控制臺(tái)打印log輸出重復(fù)的解決方法

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

…… # 4 - 創(chuàng)建并添加handler - 控制臺(tái) sh = logging.StreamHandler() sh.setFormatter(format) # 5 - 創(chuàng)建并添加handler - 文件 fh = logging.FileHandler(’test.log’) fh.setFormatter(format) #在新增handler時(shí)判斷是否為空 if not logger.handlers: logger.addHandler(sh) logger.addHandler(fh) # 6 - 提供對(duì)外獲取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控制臺(tái)打印log輸出重復(fù)的解決方法

針對(duì)面向?qū)ο蟮姆桨竿瑯邮且陨蟽蓚€(gè),請(qǐng)自行解決

總結(jié)

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

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产视频三级 | 国产精品一区二区av | 男女视频在线观看 | 免费的特黄特色大片在线观看 | 久久se精品一区二区国产 | 性色网址| 国产亚洲精品久久久久久无 | 在线观看视频一区二区三区 | 私人玩物福利视频 | 免费鲁丝片一级观看 | 99精品久久精品一区二区 | 国产成人精品曰本亚洲78 | 日韩免费毛片全部不收费 | 狠狠ady精品| 一本色道久久爱 | 亚洲精品视频网 | 欧美亚洲一区 | 久久国产成人亚洲精品影院老金 | 精品丝袜国产自在线拍亚洲 | 天堂一区二区三区精品 | 亚洲成人在线视频 | 91精品啪在线观看国产91九色 | 99国产精品久久久久久久日本 | 久久久亚洲欧洲日产国码二区 | 波多野结衣中文无毒不卡 | 久久精品国产一区二区 | 免费一级在线 | 国产成人亚洲精品一区二区在线看 | 午夜欧美日韩在线视频播放 | 亚洲精品中文字幕一区 | 久久久免费| 99精品视频在线播放2 | 加勒比在线免费视频 | 国产日韩在线看 | 国产三级黄色 | 五月久久亚洲七七综合中文网 | 日本不卡一二三区 | 青青视频国产依人在线 | 玖草资源在线 | 国产成人精品综合在线 | 亚州a|