Python默认情况下关闭记录器

Python默认情况下关闭记录器,python,logging,Python,Logging,在Python中,我希望可以选择从一个模块进行日志记录,但在默认情况下,通过函数调用启用此日志记录。(此文件的输出将非常垃圾-因此默认情况下最好不要使用) 我希望我的代码看起来像这样 log=logging.getLogger(“模块”) log.switch_off() --- 导入模块 module.log.switch_on() 我似乎找不到禁用记录器的选项 考虑的备选方案: 使用过滤器:我认为这对客户来说有点混乱 设置一个高于我用来记录的级别:(例如,logging.CRITICAL

在Python中,我希望可以选择从一个模块进行日志记录,但在默认情况下,通过函数调用启用此日志记录。(此文件的输出将非常垃圾-因此默认情况下最好不要使用)

我希望我的代码看起来像这样

log=logging.getLogger(“模块”)
log.switch_off()
---
导入模块
module.log.switch_on()
我似乎找不到禁用记录器的选项

考虑的备选方案:

  • 使用过滤器:我认为这对客户来说有点混乱
  • 设置一个高于我用来记录的级别:(例如,
    logging.CRITICAL
    )。我不喜欢,如果我们使用那个级别,我们可能会在不经意间将日志行抛出到正常输出中
  • 使用标志并添加ifs
  • 要求客户端排除我们的日志事件。看

    • 这里有两件事在起作用。Python有
      logging.Logger
      对象和
      logging.Handler
      对象,它们共同为您提供日志信息。日志记录器处理收集日志信息的逻辑,并决定是否应将日志发送给关联的处理程序。如果日志记录的日志级别低于记录器中指定的级别,则不会将信息传递给关联的处理程序

      处理程序具有相同的功能,并且由于处理程序是日志记录和已定义输出之间的最后一行,因此您可能希望禁用其中的交互。为了实现这一点,并避免在其他地方无意中记录日志,您可以向应用程序添加新的日志记录级别:

      logging.addLevelName(logging.CRITICAL+1,“DISABLELOGGING”)

      注意:这只是出于格式化目的将名称映射到值,因此您还需要向日志模块添加成员:

      logging.DISABLELOGGING=logging.CRITICAL+1

      将其设置为高于
      CRITICAL
      的值可确保不会传递和发出任何正常日志事件

      然后,您只需将处理程序设置为您定义的级别:

      handler.setLevel(logging.DISABLELOGGING)

      现在应该没有通过处理程序的日志,因此没有显示输出