日志#

禁用日志文件中的终端文本格式化#

从你给出的日志内容来看,其中包含了 ANSI 转义序列(像  这种),这些序列原本是用于在终端里实现文本格式化的(比如设置颜色、加粗等效果),不过在普通日志输出里,它们就会以原始的样子呈现,进而造成显示混乱。

import logging
import re

class NoColorFormatter(logging.Formatter):
    ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])')
    
    def format(self, record):
        # 先调用父类的格式化方法
        msg = super().format(record)
        # 过滤ANSI转义序列
        return self.ansi_escape.sub('', msg)

# 配置日志
logger = logging.getLogger('tool')
handler = logging.StreamHandler()
formatter = NoColorFormatter('%(levelname)s|%(asctime)s|%(name)s|%(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
# 测试日志输出
logger.info("ls\n\033[1;34mbin\033[m  \033[1;34mdev\033[m  \033[1;34metc\033[m")
INFO|2025-08-13 04:01:19,550|tool|ls
bin  dev  etc
print("ls\n\033[1;34mbin\033[m  \033[1;34mdev\033[m  \033[1;34metc\033[m")
ls
bin  dev  etc