python log日志重复打印的问题(尝试全网无效,终解决)

目录

环境说明

问题描述

问题排查

问题发现

问题解决

原因分析

启发

原创不容易,如果对你有所帮助,请赏一键三连!感谢!


环境说明

python3.6

用到了tensorXboard 对应 tensorflow版本是2.2.0

pytorch版本1.7

python3.6 系统自带logging

问题描述

日志上有重复内容输出

问题排查

这个问题以前从来没有发现,是在改了一个版本的代码后出现的。

我在网上搜索了一下别人都是说是logger设置的问题,但是这个Logger的文件,我是用了其他人的,而且以前从来没有出现过这种问题

分享下我的Logger文件

# encoding: utf-8
"""
@author:  sherlock
@contact: sherlockliao01@gmail.com
"""

import logging
import os
import sys


def setup_logger(name, save_dir, distributed_rank=0):
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    # don't log results for the non-master process
    if distributed_rank > 0:
        return logger
    ch = logging.StreamHandler(stream=sys.stdout)
    ch.setLevel(logging.DEBUG)
    formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s")
    ch.setFormatter(formatter)
    logger.addHandler(ch)


    if save_dir:
        if not os.path.exists(save_dir):
            os.makedirs(save_dir)
        fh = logging.FileHandler(os.path.join(save_dir, name+".log"), encoding='utf-8', mode='a')
        fh.setLevel(logging.DEBUG)
        fh.setFormatter(formatter)
        logger.addHandler(fh)

    return logger

 所以我的思路放在了,是否因为新加的日志内容有误,导致重复打印,排查了一圈也没有这个问题。

最后解决思路,将自己新增的代码一行一行注释掉,排查到底是哪一行代码出现的问题。

问题发现

使用了终极大招,排除注释大法后,问题发现了。

问题就出在下面两行代码里面

writer.add_scalar('Learning Rate', get_learning_rate(optimizer), global_step=(epoch + 1))
     
logger.info(
            "Epoch [{:03d}/{:03d}] Learing Rate: {:07f}".format(epoch, opt.epoch,  get_learning_rate(optimizer)))

 第一行代码是将learning rate 写入到tensorxboard里面

第二行代码是正常打印日志

看起来很正常的代码怎么会有问题,通过注释大法后发现,问题出在第一行将learning rate 写入到tensorxboard里面。

问题解决

1、注释掉第一行writer.add_scalar

但我还是想将学习率写到tensorxboard里面呀,怎么办?请看方法2

2、这是很神奇的解决办法,我通过将writer.add_scalar中Learning Rate改为LR就没有出现重复打印的问题

原因分析

目前没有时间去做,大神们如果知道欢迎指导下!!

启发

希望我的解决办法能给你提供一些启发。实在找不出问题,就注释大法,排查下,这是最笨,但是在毫无思绪下,最有效的办法。在没有思绪的情况,只能什么方法都试试!最后什么原因都有可能!

原创不容易,如果对你有所帮助,请赏一键三连!感谢!

你是一个可以影响我的人!你的认可是我创作的动力,非常感谢!

有问题,欢迎随时交流探讨!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值