为不同的记录器设置不同的文件名

时间:2018-10-25 09:40:16

标签: python debugging

使用以下python代码:

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

如何设置将 log1 写入 fileName1 log2 写入 filename2
默认情况下,它们都写入STDERR,而不是全部写入文件

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

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

有几种方法可以避免/配置/改善这种行为:

  • 如果可以的话什么也不要做(例如,您希望所有日志记录都转到默认输出,但有些记录要在其他目的地重复)
  • 将这些记录器设置为不传播(logger.propagate = False),在这种情况下,日志记录将在相关记录器处“停止”,并且不再进一步上升
  • NullHandler设置为根记录器的处理程序,以使其不打印收到的消息(如果消息到达根记录器且未配置处理程序,则会自动设置StreamHandler(sys.stderr) ),这将允许所有消息到达根记录器,并且仅被那里丢弃,如果您以后想添加其他处理程序(例如,将所有日志消息一次发送到syslog),这将非常方便。点)
  • 完全禁用root记录器(logging.getLogger().disabled = True),但这没有真正记录在案,而且有点虚假