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

Python使用logging模块时如何实现日志级别字符串等宽对齐输出

方案1:直接使用格式化字符串固定宽度对齐(无侵入,推荐)

这个方案不需要修改默认的日志级别名称,仅通过调整Formatter的格式配置就能实现对齐,Python 3.2及以上版本支持style参数使用str.format语法,可轻松实现居中、左对齐、右对齐效果。
示例代码:

import logging

# 配置日志,使用{风格的格式,指定levelname固定占8位,居中对齐
logging.basicConfig(
    level=logging.DEBUG,
    format="[{levelname:^8s}] - {message}",
    style="{"
)

# 测试输出
logging.debug("Message")
logging.info("Message")
logging.warning("Message")
logging.error("Message")
logging.critical("Message")

输出效果:

[  DEBUG  ] - Message
[  INFO   ] - Message
[ WARNING ] - Message
[  ERROR  ] - Message
[CRITICAL] - Message

如果习惯用传统%风格的格式化,可以用%(levelname)8s实现右对齐,%-8s实现左对齐,示例:

# %风格右对齐配置
logging.basicConfig(
    level=logging.DEBUG,
    format="[%(levelname)8s] - %(message)s"
)
方案2:自定义缩写日志级别名称

如果需要和你示例里的短名称效果一致,可以修改默认的日志级别显示名称,再配合固定宽度格式即可:

import logging

# 重定义各日志级别的显示名称
logging.addLevelName(logging.DEBUG, "DBUG")
logging.addLevelName(logging.INFO, "INFO")
logging.addLevelName(logging.WARNING, "WARN")
logging.addLevelName(logging.ERROR, "EROR")
# CRITICAL保持原名称长度,也可以缩写为CRIT等按需调整
logging.addLevelName(logging.CRITICAL, "CRITICAL")

# 配置格式,固定8位居中对齐
logging.basicConfig(
    level=logging.DEBUG,
    format="[{levelname:^8s}] - {message}",
    style="{"
)

# 测试输出
logging.debug("Message")
logging.info("Message")
logging.warning("Message")
logging.error("Message")
logging.critical("Message")

输出效果和你给出的示例完全一致:

[  DBUG  ] - Message
[  INFO  ] - Message
[  WARN  ] - Message
[  EROR  ] - Message
[CRITICAL] - Message
方案3:自定义Formatter类(高灵活度)

如果需要更复杂的处理逻辑,比如不同级别自定义不同的缩写规则、对齐逻辑,可以继承logging.Formatter重写format方法,该方案不会全局修改日志级别名称,适合多日志实例的场景:

import logging

class AlignLevelFormatter(logging.Formatter):
    def format(self, record):
        # 自定义levelname处理逻辑
        level_map = {
            logging.DEBUG: "DBUG",
            logging.INFO: "INFO",
            logging.WARNING: "WARN",
            logging.ERROR: "EROR",
            logging.CRITICAL: "CRITICAL"
        }
        record.levelname = level_map.get(record.levelno, record.levelname)
        # 调用父类方法完成剩余格式化
        return super().format(record)

# 配置日志
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
# 使用自定义Formatter
formatter = AlignLevelFormatter("[{levelname:^8s}] - {message}", style="{")
handler.setFormatter(formatter)
logger.addHandler(handler)

# 测试
logger.debug("Message")

内容的提问来源于stack exchange,提问作者WatsonBoi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:02