logging日志重復打印問題


在做接口自動化,使用logging模塊打印日志時,遇到一個坑:第一次調用打印一次,第二次調用打印兩次,第三次調用打印三次。。。

修改前:

def log(msg):

    logger = logging.getLogger("App")
    handler = logging.FileHandler('test.log')

    logger.setLevel(logging.INFO)                #設置日志等級
    # 日志輸出格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    # 輸入到控制台
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)

    logger.addHandler(handler)
    logger.addHandler(console)

    logger.info(msg)

 

一開始以為是logging.getLogger()多次實例化的問題,於是乎對logging.getLogger()寫了一個單例,但是問題仍然沒有解決。

原來logging的打印是由handler進行處理的,第一次調用時添加了handler,第二次調用又添加了一個handler,所以,這個logger里有了兩個同樣的handler,以此類推,調用幾次就會有幾個handler。。。

解決辦法:打印日志后,通過removeHandler()將處理器移除掉。

修改后:

def log(msg):

    logger = logging.getLogger("App")
    handler = logging.FileHandler('test.log')

    logger.setLevel(logging.INFO)                #設置日志等級
    # 日志輸出格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    # 輸入到控制台
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)

    logger.addHandler(handler)
    logger.addHandler(console)

    logger.info(msg)
    #移除處理器
    logger.removeHandler(handler)
    logger.removeHandler(console)

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM