91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

武汉市| 民勤县| 定州市| 丹江口市| 留坝县| 临沧市| 长武县| 名山县| 房产| 平江县| 霍林郭勒市| 比如县| 五指山市| 民勤县| 长治县| 临桂县| 色达县| 栾城县| 宁德市| 墨竹工卡县| 陵水| 中宁县| 福海县| 牙克石市| 田阳县| 乐业县| 曲水县| 温泉县| 荔波县| 册亨县| 芒康县| 邵阳县| 济南市| 五台县| 绥德县| 晋江市| 辽源市| 那坡县| 闵行区| 普格县| 山西省|