使用Python logging模块写入日志到文件时如何关闭控制台输出
问题原因
Python logging 模块默认的根日志器(root logger)自带了输出到控制台的StreamHandler,你自定义的resource_manager日志器默认开启了日志事件向上传播的属性,因此日志事件会冒泡到根日志器,触发根的StreamHandler输出到控制台。
解决方案
方案1:仅针对当前自定义日志器禁用控制台输出
只需在配置自定义logger的代码中,添加一行关闭日志传播的配置即可,不会影响其他日志器的行为:logger.propagate = False
修改后的完整代码如下:
import logging import time logger = logging.getLogger('resource_manager') logger.setLevel(logging.DEBUG) # 关闭日志向父日志器传播,阻止触发根日志器的控制台输出 logger.propagate = False 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) delay = 0 # 示例变量,请替换为你业务逻辑中的实际变量 logger.info(f'{(time.time()-delay)}')
方案2:全局禁用所有日志的控制台输出
如果希望所有日志都不会输出到控制台,可以直接清空根日志器的默认处理器:
# 清空根日志器默认的StreamHandler logging.getLogger().handlers.clear()
内容的提问来源于stack exchange,提问作者Helen
相关产品推荐
相关产品推荐

