首页 > 解决方案 > 为不同的记录器设置不同的文件名

问题描述

使用这个 python 代码:

import logging
log1 = logging.getLogger("module1")
log2 = logging.getLogger("module2")

如何设置log1写入fileName1log2写入filename2
默认情况下,它们都写入 STDERR 而不是文件

提前谢谢

标签: pythondebugging

解决方案


直接将相关处理程序添加到每个记录器,例如 log1.addHandler(logging.handlers.FileHandler(fileName1) log2.addHandler(logging.handlers.FileHandler(fileName1)

您可能需要在这些处理程序上设置任何格式化程序。

请注意,此时,发送到任一记录器的消息仍将写入 stderr:logging是处理程序树,记录记录从“叶”记录器开始,并在发送到其父记录器之前由每个记录器处理,直到根记录器。路径中的每个记录器都可能将消息打印到某些输出(例如文件、系统日志、流……)并将其发送到其父级。

有几个选项可以避免/配置/改进这种行为:

  • 如果没问题,什么也不做(例如,您希望所有日志记录都转到默认输出,但有些要在其他目的地复制)
  • 将这些记录器设置为不传播 ( logger.propagate = False),在这种情况下,日志记录将在相关记录器处“停止”,并且不会再向上爬到树上
  • 将 a 设置NullHandler为根记录器的处理程序,这样它就不会打印它接收到的消息(如果消息到达根记录器并且没有配置处理程序,StreamHandler(sys.stderr)则自动设置 a),这允许所有消息到达根记录器并且只被放在那里,如果您想在将来添加更多处理程序,这很方便(例如,将每条日志消息发送到系统日志)
  • 完全禁用根记录器(logging.getLogger().disabled = True),但这并没有真正记录在案,而且有点不确定

推荐阅读