pycharm运行脚本创建.log文件,文件无法打开,读取失败,文件图标右边显示"?",请问怎么解决?

运行右侧代码生成.log文件,双击report.log文件无法打开,pycharm没有报错信息


使用pytest运行右侧的用例,生成.log文件


该.log文件可以查看打开


其中conftest文件中添加了LoggerHandler类,可以打开的.log文件是由这部分代码生成的,全部代码内容如下


import logging
import os
from datetime import datetime
from typing import List

import pytest


def pytest_collection_modifyitems(
    session: "Session", config: "Config", items: List["Item"]
) -> None:
    '''
    重写hook函数,将收集上来的用例名称编码格式设置成支持中文格式
    :param session:
    :param config:
    :param items:
    :return:
    '''
    for item in items:
        # 用例名
        item.name = item.name.encode('utf-8').decode('unicode-escape')
        # 用例的路径
        item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')

class LoggerHandler:
    # 可设置的日志等级,左侧最少右侧最多
    _log_level = ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET')
    _self_log_level = 'INFO'
    _rootpath = "./"

    def __init__(self):
        self.logger = logging.getLogger(__name__)

    def create(self):
        # 获取当前日志等级
        self_log_level = self._self_log_level.upper()

        # 判断当前日志等级是否在指定范围
        if self_log_level not in self._log_level:
            raise ValueError(f"--self-log-level 设置的值不在范围: {self._log_level}")

        self.logger.setLevel(getattr(logging, self_log_level))
        if not self.logger.handlers:
            # 设置日志输出流
            f_stream = logging.StreamHandler()

            # 生成日志文件完整路径
            f_file = logging.FileHandler(os.path.join(self.set_log_dir(),
                                                      f"{datetime.now().strftime('%Y_%m_%d_%H_%M_%S')}.log"),
                                         encoding='utf-8')

            # 设置输出流级别
            f_stream.setLevel(getattr(logging, self_log_level))
            f_file.setLevel(getattr(logging, self_log_level))

            # 设置日志输出格式
            formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s : %(message)s')
            f_stream.setFormatter(formatter)
            f_file.setFormatter(formatter)

            # 添加handler
            self.logger.addHandler(f_stream)
            self.logger.addHandler(f_file)
        return self.logger

    def set_log_dir(self):
        # 设置日志的目录
        if not self._rootpath:
            self._rootpath = os.getcwd()
        log_path = os.path.join(self._rootpath,
                                'logs',
                                str(datetime.now().date()))
        if not os.path.exists(log_path):
            os.makedirs(log_path)
        return log_path


logger = LoggerHandler().create()

请老师麻烦看一下,为什么第一段代码生成的log文件不能打开查看,第二段代码生成的log却可以

请尝试这样设置


有配置的,没有效果

请尝试下 把这个选项去除勾选后在删除日志文件,在重新运行程序

1 Like

去掉勾选就可以查看了,这个原因是什么呢?

取消捆綁

关闭