溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何解決控制臺打印log輸出重復問題

發(fā)布時間:2022-02-28 15:33:10 來源:億速云 閱讀:164 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“python如何解決控制臺打印log輸出重復問題”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python如何解決控制臺打印log輸出重復問題”吧!

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

代碼示例:
 
'''
功能描述:實現(xiàn)控制臺和文件同時記錄日志的功能
編寫人:超哥
編寫日期:
步驟分析:
  1-配置日志記錄器名稱
  2-配置日志級別
  3-配置日志格式(可以分別設置,也可以統(tǒng)一設置)
  4-創(chuàng)建并添加handler-控制臺
  5-創(chuàng)建并添加handler-文件
  6-提供對外獲取logger
'''
 
import logging
import sys
 
 
def log():
   # 1 - 配置日志記錄器名稱
   logger = logging.getLogger('AutoTest')
 
   # 2-配置日志級別
   logger.setLevel(logging.DEBUG)
 
   # 3-配置日志格式(可以分別設置,也可以統(tǒng)一設置)
   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)建另外一個文件:

在我們導入寫好的log.py文件

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

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

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

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

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

   ……省略上方代碼

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

導入:

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

輸出:

python如何解決控制臺打印log輸出重復問題

第二個方案: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方法')

導入文件代碼保持不變:

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

感謝各位的閱讀,以上就是“python如何解決控制臺打印log輸出重復問題”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對python如何解決控制臺打印log輸出重復問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI