赞
踩
跑程序,需要控制多个变量,因此想着能够用几个循环来控制,然后每次跑得都能把中间输出放到对应的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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。