簡體   English   中英

是否可以從 python 3.0 中的單個模塊登錄多個日志文件

[英]Is it possible to log into multiple log files from a single module in python 3.0

是否可以從 python 3.0 中的單個模塊登錄多個日志文件,其中日志文件是根據某些請求參數命名的,同時使用 flask 框架。

如果我像單個模塊一樣運行它並導入,下面的代碼工作正常,但是當我使用 flask 運行時,它會在第一次嘗試時寫入,但后來回退到記錄到根記錄器。

我想要一個 flask 中的日志記錄工廠,它可以檢查記錄器是否已經存在,如果已經存在則登錄同一文件,如果不存在則創建一個新的記錄器並記錄到新文件。

任何幫助是極大的贊賞。

def setup_logger( name, log_file, level=logging.INFO):

    my_file = Path(log_file)
    print(my_file)
    if my_file.is_file():
        print("handler details")
        print(logging.getLogger(name).hasHandlers())
        print(type(logging.getLogger(name).hasHandlers()))
        if logging.getLogger(name).hasHandlers():
            print("old logger and it has handler")
            logger.propagate = False
            return logging.getLogger(name)
        else:
            handler = logging.FileHandler(log_file, mode='a')        
            handler.setFormatter(formatter)
            logger = logging.getLogger(name)
            logger.setLevel(level)
            logger.addHandler(handler)
            logger.propagate = False
            print("old logger that has no handler")
            return logger
    else:
        handler = logging.FileHandler(log_file, mode='a')        
        handler.setFormatter(formatter)

        logger = logging.getLogger(name)
        logger.setLevel(level)
        logger.addHandler(handler)
        print("new logger with new handler")
        logger.propagate = False
        return logger

好吧,我能夠通過以下方法實現所需的功能:

def setup_logger( name, log_file, level=logging.DEBUG): 

    my_file = Path(log_file)
    # print("check the if condition for the file")
    # print(my_file.is_file())

if my_file.is_file():
    #print(logging.getLogger(name).hasHandlers())
    # if logging.getLogger(name).hasHandlers():
    if len(logging.getLogger(name).handlers)>0:
        return logging.getLogger(name)
    else:
        handler = logging.FileHandler(log_file, mode='a')        
        handler.setFormatter(formatter)
        logger = logging.getLogger(name)
        logger.setLevel(level)
        logger.addHandler(handler)
        logger.propagate = False
        return logger
else:
    handler = logging.FileHandler(log_file, mode='a')        
    handler.setFormatter(formatter)

    logger = logging.getLogger(name)
    logger.setLevel(level)
    logger.addHandler(handler)
    logger.propagate = False
    return logger

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM