You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:57:04