Python自定义logger因调用文件路径不同出现路径错误如何解决?
解决方案
问题根源
你使用了相对于运行时工作目录的相对路径生成日志文件地址,不同层级的测试用例运行时,工作目录会跟随脚本所在目录变化,导致相对路径解析失效。
修复方案
通过logger代码文件的固定存放位置计算项目根目录,生成绝对路径,完全不受测试用例运行位置的影响,同时增加目录自动创建逻辑避免目录不存在报错。
修改后的完整代码
import inspect import logging import logging.config import time import os def custom_logger(log_level=logging.DEBUG): logger_name = inspect.stack()[1][3] logger = logging.getLogger(logger_name) # 避免重复添加handler导致日志重复输出 if logger.handlers: return logger logger.setLevel(logging.DEBUG) # 基于当前文件路径计算项目根目录(POM文件夹路径) # 假设当前logger代码存放在Utilities目录下,与Logs目录同级 current_file_path = os.path.abspath(__file__) # 两层dirname:当前文件 -> Utilities目录 -> POM根目录 project_root = os.path.dirname(os.path.dirname(current_file_path)) log_dir = os.path.join(project_root, 'Logs') # 自动创建Logs目录(如果不存在) if not os.path.exists(log_dir): os.makedirs(log_dir) curr_time = time.strftime("%Y-%m-%d") log_file_name = os.path.join(log_dir, f'log{curr_time}.log') file_handler = logging.FileHandler(log_file_name, mode='a') file_handler.setLevel(log_level) formatter = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - %(name)s - %(levelname)s: %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger
注意事项
如果你的logger代码不是存放在Utilities目录下,只需要调整os.path.dirname的层数,保证最终project_root指向POM文件夹路径即可。
内容的提问来源于stack exchange,提问作者Arm91
相关产品推荐
相关产品推荐

