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

问题描述

我有一个服务在 docker 内部的烧瓶上运行,它接收请求。 对于每个请求,我想导出一个日志文件包括所有模块的所有日志。 现在,它不断地记录日志以使用 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))

other_module.py

logger = logging.getLogger(__name__)
  • 控制台日志功能很棒
  • 文件日志仅包含 requestHandler.py 中的一行日志
  • 删除处理程序的循环是空的 - 它没有检测到任何处理程序,但想法是它应该用新的文件处理程序替换旧的文件处理程序。

如果您对此功能解决方案或更好的方法,请提供帮助。 谢谢!:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)