[已解決] Python logging 重復打印日志信息


問題描述

問題代碼如下:

def get_logger(logger_name):
    """得到日志對象"""
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter('[ %(asctime)s ] - %(levelname)s - %(message)s')
    # 用於輸出至文件
    file_log_handler = logging.FileHandler(settings.VIEW_LOG_PATH, encoding=settings.DEFAULT_CHARSET)
    file_log_handler.setLevel(logging.DEBUG)
    file_log_handler.setFormatter(formatter)
    # logger綁定處理對象
    logger.addHandler(file_log_handler)
    return logger

此時例如執行logger = get_logger('HCS'),並且后續日志對象的logger_name均是HCS時,此后多次打印日志會出現日志信息條數線性增加,例如第一次打印一條,第二條打印相同的兩條日志,第三次打印相同的三條日志.......

原因

因為logger的name被固定,所以當你第一次為logger對象添加FileHandler對象之后,如果沒有移除上一次的FileHandler對象,第二次logger對象就會再次獲得相同的FileHandler對象,即擁有兩個FileHandler對象,最終造成打印兩次,同樣,如果此時沒有立即移除上一次的FileHandler對象,第三次logger對象就會再次獲得相同的FileHandler對象,即擁有三個FileHandler象,最終打印3次........

解決辦法

1.每次添加日志,創建與上次日志對象的name屬性不同的logger對象

2.通過logger對象的handlers屬性,控制重復輸出(推薦

def get_logger(logger_name):
    """得到日志對象"""
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter('[ %(asctime)s ] - %(levelname)s - %(message)s')
    if not logger.handlers:
        # 用於輸出至文件
        file_log_handler = logging.FileHandler(settings.VIEW_LOG_PATH, encoding=settings.DEFAULT_CHARSET)
        file_log_handler.setLevel(logging.DEBUG)
        file_log_handler.setFormatter(formatter)
        # logger綁定處理對象
        logger.addHandler(file_log_handler)
    return logger

3.每次logger輸出后,移除FileHandler對象


免責聲明!

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



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