使用Python登录文件



我这样做是为了将信息保存到我的文件中,但我也在控制台中得到了输出。我怎么做才能在控制台中看不到信息,而在文件中看到它?

logger = logging.getLogger('resource_manager')
logger.setLevel(logging.DEBUG)
info_log = logging.FileHandler('/home/nvidia/Videos/Info.log')
info_log.setFormatter(logging.Formatter('%(asctime)s - %(message)s'))
info_log.setLevel(logging.INFO)
logger.addHandler(info_log)
logger.info(f'{(time.time()-delay)}')

您可以禁用事件从这个记录器传播到它的父记录器(根记录器),这将防止它们被根记录器的StreamHandler处理(这是写入标准错误的内容)。

logger = logging.getLogger('resource_manager')
logger.propagate = False

在这里,您添加了一个处理程序来写入文件。您需要做的是删除写入STDERR的默认处理程序。

我这样做是为了将信息保存到我的文件中,但我也在控制台中得到了输出。

这可能意味着一些其他日志配置已经激活(例如,您确定在同一个Python程序中没有调用logging.basicConfig()吗?);特别是,根记录器有一个附加的StreamHandler

记录器根据它们的名称按层次结构组织;例如,foofoo.barfoo.baz的父节点,foo.bazfoo.baz.spam的父节点。该层次结构的顶端是根记录器(即名称为空的)。默认情况下,记录器将发出的记录(除非记录的级别对于给定记录器来说太低)传播到它们的父记录器(以便最终这些记录到达记录器)。

防止记录器将发出的记录传播到父记录的一个简单方法是将记录器的propagate属性设置为False(默认为True)。

那么试试这个:

logger.propagate = False

推荐阅读:

  • https://docs.python.org/3/library/logging.html logging.Logger.propagate
  • https://docs.python.org/3/library/logging.html logging.getLogger

最新更新