python添加来自多个模块的文件日志记录-为每个请求添加新文件

python添加来自多个模块的文件日志记录-为每个请求添加新文件,python,flask,logging,filehandler,Python,Flask,Logging,Filehandler,我在docker内部的flask上运行一个服务,它接收请求。 对于每个请求,我想导出一个日志文件,其中包括所有模块中的所有日志。 现在,它不断地使用basicConfig进行日志记录以流式传输,这非常棒。 但是,我需要为每个请求添加一个fileHandler(不同的文件路径) 我在请求到达requestHandler.py时添加了fileHandler,并在处理请求时删除了该处理程序。这是可行的,文件创建正确,但问题是由于某些原因,它不适用于其他模块。它只是从创建处理程序的模块记录到文件 在读取

我在docker内部的flask上运行一个服务,它接收请求。 对于每个请求,我想导出一个日志文件,其中包括所有模块中的所有日志。 现在,它不断地使用basicConfig进行日志记录以流式传输,这非常棒。 但是,我需要为每个请求添加一个fileHandler(不同的文件路径)

我在请求到达requestHandler.py时添加了fileHandler,并在处理请求时删除了该处理程序。这是可行的,文件创建正确,但问题是由于某些原因,它不适用于其他模块。它只是从创建处理程序的模块记录到文件

在读取文档时,日志记录表明它应该是全局的:

使用登录多个模块

对logging.getLogger('someLogger')的多次调用返回对同一记录器的引用 这不仅在同一个模块内是正确的,而且在模块间也是正确的,只要 在同一个Python解释器进程中。对同一对象的引用也是如此; 此外,应用程序代码可以在一个模块和 在单独的模块中创建(但不配置)子记录器,以及对 子模块将传递给父模块。下面是一个主模块:

我的模块设置:

main.py

logging.basicConfig(level=logging.INFO, format=config.LOG_FORMAT)
logger = logging.getLogger()
requestHandler.py

logger = logging.getLogger(__name__)

def add_file_logging(self):
    for hdlr in logger.handlers[:]:  # remove the existing file handlers
        if isinstance(hdlr, logging.FileHandler):
            logger.removeHandler(hdlr)
    fh = logging.FileHandler(filename=self.log_file_path)
    fh.setFormatter(config.LOG_FORMAT)
    fh.setLevel(logging.INFO)
    logger.addHandler(fh)
    logger.info("Added file handler : {}".format(self.log_file_path))
其他模块.py

logger = logging.getLogger(__name__)
  • 控制台日志非常有用
  • 文件日志记录仅包括requestHandler.py中的一行日志
  • 删除处理程序的循环是空的——它不会检测到任何处理程序,但其思想是它应该用新的文件处理程序替换旧的文件处理程序
如果您对此功能有解决方案或更好的方法,请提供帮助。 谢谢!:)