python3.7 logging 重复打印信息
- 原因:
该问题出现的原因主要是使用自定义的 setup_logger 函数创建多个同名的 logger,例如,在一次运行代码中,多次调用
# 第一次调用
logger = setup_logger("fcos_core", save_dir, get_rank())
#
#
#
第二次调用
logger = setup_logger("fcos_core", save_dir, get_rank())
#
#
#
- 解决方法:
在使用自定义的 logger 函数的创建 logger 对象的时候,应当先判断是否有同名 logger存在,如下代码(关键是代码中的if语句):
def setup_logger(name, save_dir, rank):
# 创建保存目录(如果不存在)
os.makedirs(save_dir, exist_ok=True)
# 获取 logger
logger = logging.getLogger(name)
# 检查 logger 是否已经存在
if not logger.hasHandlers():
logger.setLevel(logging.DEBUG) # 设置日志级别
# 创建文件处理器
file_handler = logging.FileHandler(os.path.join(save_dir, f"{name}.log"))
file_handler.setLevel(logging.DEBUG)
# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
# 创建格式器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 添加处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
完结撒花