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