如何按条件创建多个日志文件?现有代码仅生成单个文件求解
问题原因
logging.basicConfig() 是Python logging模块的基础配置方法,但它只会在第一次被调用时生效,后续重复调用不会修改已有的日志配置。你的循环里,第一次配置了abc的日志文件后,第二次调用basicConfig试图切换到bca的文件时会被忽略,日志依然输出到abc的文件里,自然不会生成bca.log。
解决方案
推荐用独立Logger实例+FileHandler实现多日志文件需求,能灵活控制不同日志输出到对应文件,避开basicConfig的限制。
修正后的代码
import logging import datetime def get_logger(log_name): # 创建专属Logger实例,不使用根logger logger = logging.getLogger(log_name) logger.setLevel(logging.DEBUG) # 避免重复添加Handler,防止日志重复输出 if not logger.handlers: log_day = datetime.datetime.now().strftime('%d-%m-%Y') log_path = f'/home/test/{log_day}_{log_name}' # 创建文件处理器并设置日志格式 handler = logging.FileHandler(log_path) formatter = logging.Formatter('%(asctime)s:%(levelname)s:%(message)s') handler.setFormatter(formatter) logger.addHandler(handler) return logger data = ["abc","bca"] for i in data: if i == "abc": logger = get_logger("abc.log") logger.info("Hello") else: print("hello") logger = get_logger("bca.log") logger.info("Hello bca")
代码说明
- 每个日志文件对应唯一的Logger实例,通过
logging.getLogger(log_name)创建 - 为每个Logger绑定专属的FileHandler,指定对应的日志文件路径
- 加入
if not logger.handlers判断,避免重复添加Handler导致日志重复输出 - 这种方式比反复调用basicConfig更规范,也支持后续扩展更复杂的日志配置
如果想快速修改原有代码(不推荐长期使用),可以在每次调用basicConfig前重置根logger配置:
import logging import datetime def log_file(log_name): log_day = datetime.datetime.now().strftime('%d-%m-%Y') log_name = '/home/test/' + log_day + "_" + log_name return log_name data = ["abc","bca"] for i in data: # 重置根logger的所有处理器 for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) handler.close() if i == "abc": log_name = "abc.log" logging.basicConfig(filename=log_file(log_name), level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(message)s') logging.info("Hello") else: print("hello") log_name = "bca.log" logging.basicConfig(filename=log_file(log_name), level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(message)s') logging.info("Hello bca")
内容的提问来源于stack exchange,提问作者Tonin thomas
相关产品推荐
相关产品推荐

