【问题标题】:Python Custom logger path error depending on the file path it is used inPython自定义记录器路径错误取决于它使用的文件路径
【发布时间】:2021-11-27 10:08:00
【问题描述】:

我有一个自定义记录器。它在 Logs 文件夹中创建一个文件。 这是代码的一部分

curr_time = time.strftime("%Y-%m-%d")
log_file_name = '../Logs/log' + curr_time + '.log'

我有一个 Tests 文件夹,我在其中创建测试用例,并在这些测试用例中使用日志记录。 Tests 文件夹中的测试一切正常

当我在 Tests 下的子文件夹中创建测试时出现问题

FileNotFoundError: [Errno 2] 没有这样的文件或目录:

这是我的文件夹层次结构

POM

配置

日志

页面

测试

实用程序

我认为这是因为文件夹路径,因为当我将“../Logs/log”更改为“../../Logs/log”时,代码开始用于子文件夹测试并抛出错误消息主 Tests 文件夹中的测试

这是自定义记录器文件

import inspect
import logging
import logging.config
import time


def custom_logger(log_level=logging.DEBUG):
    logger_name = inspect.stack()[1][3]
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.DEBUG)

    curr_time = time.strftime("%Y-%m-%d")
    log_file_name = '../Logs/log' + curr_time + '.log'

    file_handler = logging.FileHandler(log_file_name.format(logger_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

【问题讨论】:

  • 如果您希望日志相对于 code 位置,为什么不使用__file__ 来构建路径?
  • 谢谢@2e0byo,经过一番努力,我找到了解决问题的部分方法。有兴趣请看我的回答。

标签: python python-3.x selenium path pytest


【解决方案1】:

我能够通过此解决方案部分解决问题

curr_time = time.strftime("%Y-%m-%d")
path = Path(__file__).parent.absolute().joinpath('Logs')
log_file_name = str(path) + '/log' + curr_time + '.log'

问题在于它在 Utilities/Logs 下创建日志文件(因为 custom_logger.py 在 Utilities 文件夹中),而我希望在项目根目录 /Logs 文件夹中创建它们

os.chdir 没有帮助,因为根据运行测试的文件夹,它会错误地更改目录。

如果有人能给出更好的解决方案,我会很高兴,同时,我会使用这个解决方案。

【讨论】:

  • 如果我的层次结构正确,为什么不直接Path(__file__).parent.parent / f"Logs/log{current_time}.log"
  • 我不知道为什么或如何,但这解决了我的问题,非常感谢! log_file_name = f"{Path(__file__).parent.parent}/Logs/log{current_time}.log"
猜你喜欢
  • 2017-06-19
  • 2019-02-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2023-04-09
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多