如何在Python logging模块中按日志级别自定义输出格式适配Azure Pipelines
可以实现,通过自定义 logging.Formatter 就能完全自主控制不同级别日志的输出格式,不需要依赖Python日志级别名称和Azure Pipelines命令的对应关系,具体实现如下:
步骤1:自定义格式化类
继承官方的Formatter类,重写format方法,根据日志的级别编号匹配对应的Azure Pipelines前缀即可:
import logging class AzurePipelinesFormatter(logging.Formatter): def format(self, record): # 先调用父类方法生成基础消息,自动处理参数占位、异常栈等内容 base_msg = super().format(record) # 按需匹配日志级别和输出前缀 if record.levelno >= logging.ERROR: return f"##[error]{base_msg}" elif record.levelno >= logging.WARNING: return f"##[warning]{base_msg}" # info、debug等不需要特殊前缀的级别直接返回原内容 return base_msg
步骤2:配置日志使用自定义格式化器
不用basicConfig,手动给日志处理器挂载自定义的格式化器即可:
# 初始化根日志器,设置最低输出级别 root_logger = logging.getLogger() root_logger.setLevel(logging.DEBUG) # 新建控制台输出处理器 stream_handler = logging.StreamHandler() # 挂载自定义格式化器 stream_handler.setFormatter(AzurePipelinesFormatter()) # 把处理器加到根日志器 root_logger.addHandler(stream_handler)
测试效果
logging.debug("调试日志") # 输出:调试日志 logging.info("普通业务日志") # 输出:普通业务日志 logging.warning("配置不规范提示") # 输出:##[warning]配置不规范提示 logging.error("数据读取失败") # 输出:##[error]数据读取失败 logging.exception("程序运行异常") # 输出会带##[error]前缀和完整异常栈
如果后续需要新增其他特殊级别的格式,只需要在format方法里加对应的判断逻辑即可,完全自主可控。
内容的提问来源于stack exchange,提问作者YoavKlein
相关产品推荐
相关产品推荐

