是否可以从python 3.0中的单个模块登录多个日志文件

时间:2020-11-12 14:35:39

标签: python python-logging

是否可以从python 3.0中的单个模块登录多个日志文件,而在使用flask框架时,该日志文件是根据某些请求参数命名的。

如果我像单个模块一样运行并导入,下面的代码可以正常工作,但是当我使用flask运行时,它会在第一次尝试中写入,但后来又退回到登录到根记录器。

我想要烧瓶中的日志记录工厂,可以检查记录器是否已经存在以及是否已经存在,然后登录同一文件,如果没有,则创建一个新的记录器并记录到新文件中。

非常感谢您的帮助。

def setup_logger(名称,日志文件,级别= 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

1 个答案:

答案 0 :(得分:1)

好吧,我能够使用以下方法实现所需的功能:

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