亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

發布時間:2022-02-28 15:33:10 來源:億速云 閱讀:165 作者:iii 欄目:開發技術

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

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

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

我們在同一目錄下創建另外一個文件:

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

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

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

執行后會發現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('使用函數定義的log方法')

導入:

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

輸出:

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

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

 ……
     # 4 - 創建并添加handler - 控制臺
     sh = logging.StreamHandler()
     sh.setFormatter(format)
 
     # 5 - 創建并添加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('使用函數定義的log方法')

導入文件代碼保持不變:

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

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

向AI問一下細節

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

AI

枣阳市| 三河市| 德庆县| 丘北县| 临海市| 黄龙县| 乌拉特后旗| 天门市| 德江县| 汽车| 佳木斯市| 金湖县| 台南市| 丹阳市| 广汉市| 邵阳市| 永仁县| 城固县| 饶河县| 革吉县| 延长县| 江陵县| 平原县| 法库县| 融水| 南川市| 清丰县| 桐乡市| 遂昌县| 报价| 佛坪县| 中方县| 抚宁县| 思茅市| 阿拉善盟| 云龙县| 海兴县| 怀远县| 乐至县| 阿克陶县| 怀宁县|