You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:18:00