logger重复输出 python

logger 重复输出 python

跑程序,需要控制多个变量,因此想着能够用几个循环来控制,然后每次跑得都能把中间输出放到对应的log文件里面,但是logger的输出在跑第二个程序时变成了每次重复两次,且对应的log文件也没有,而是在第一个程序的log文件里。

这里看了一下logger相关的代码,发现是logging.root.handlers还是第一个程序的,所以没有第二个程序的log文件,且在第二个程序运行时还会新添一个streamhandler,所以后面会有两个重复输出。同样,第三个程序,控制台有三个重复的输出。

!! 解决办法
在每个程序运行前,判断一下logging.root.handlers有没有,有的话就全部pop,然后新添!

def create_logger(cfg):
    root_path=get_root_path(cfg)
    log_dir = os.path.join(root_path, "logs")
    if not os.path.exists(log_dir): 
        os.makedirs(log_dir)
    time_str = time.strftime("%Y-%m-%d-%H-%M")
    log_name = "{}.log".format(time_str)
    log_file = os.path.join(log_dir, log_name)
    # set up logger
    print("=> creating log {}".format(log_file))
    head = "%(asctime)-15s %(message)s"
    ## =============  这里 亲测有效!! ==================
    while len(logging.root.handlers)>0:
        logging.root.handlers.pop()
    # ==================================================
    logging.basicConfig(filename=str(log_file), format=head)
    logger = logging.getLogger()
    logger.setLevel(logging.INFO) 
    console = logging.StreamHandler()
    logging.getLogger("").addHandler(console)

    logger.info("---------------------Cfg is set as follow--------------------")
    logger.info(cfg)
    logger.info("-------------------------------------------------------------")
    return logger, log_file
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值