python添加来自多个模块的文件日志记录-为每个请求添加新文件
我在docker内部的flask上运行一个服务,它接收请求。 对于每个请求,我想导出一个日志文件,其中包括所有模块中的所有日志。 现在,它不断地使用basicConfig进行日志记录以流式传输,这非常棒。 但是,我需要为每个请求添加一个fileHandler(不同的文件路径) 我在请求到达requestHandler.py时添加了fileHandler,并在处理请求时删除了该处理程序。这是可行的,文件创建正确,但问题是由于某些原因,它不适用于其他模块。它只是从创建处理程序的模块记录到文件 在读取文档时,日志记录表明它应该是全局的: “使用登录多个模块 对logging.getLogger('someLogger')的多次调用返回对同一记录器的引用 这不仅在同一个模块内是正确的,而且在模块间也是正确的,只要 在同一个Python解释器进程中。对同一对象的引用也是如此; 此外,应用程序代码可以在一个模块和 在单独的模块中创建(但不配置)子记录器,以及对 子模块将传递给父模块。下面是一个主模块: 我的模块设置: main.pypython添加来自多个模块的文件日志记录-为每个请求添加新文件,python,flask,logging,filehandler,Python,Flask,Logging,Filehandler,我在docker内部的flask上运行一个服务,它接收请求。 对于每个请求,我想导出一个日志文件,其中包括所有模块中的所有日志。 现在,它不断地使用basicConfig进行日志记录以流式传输,这非常棒。 但是,我需要为每个请求添加一个fileHandler(不同的文件路径) 我在请求到达requestHandler.py时添加了fileHandler,并在处理请求时删除了该处理程序。这是可行的,文件创建正确,但问题是由于某些原因,它不适用于其他模块。它只是从创建处理程序的模块记录到文件 在读取
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中的一行日志
- 删除处理程序的循环是空的——它不会检测到任何处理程序,但其思想是它应该用新的文件处理程序替换旧的文件处理程序