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

Python logging模块自定义Formatter实现levelname居中格式化问题

Python logging中实现levelname居中对齐的解决方案

Python logging模块的%风格格式化字符串不支持直接在占位符内嵌入对齐说明符(比如:^9),要实现levelname在方括号内居中对齐,有两种可行方案:

方案1:使用str.format风格的Formatter(推荐,Python3.2+)

从Python3.2开始,logging.Formatter支持指定style参数切换为{}风格的格式化,这种风格原生支持对齐语法:

import logging

# 初始化Formatter时指定style='{',使用{levelname:^9}实现居中对齐(占9个字符宽度)
formatter = logging.Formatter(
    '[ {levelname:^9} ] {name} | Method : {funcName} | Line : {lineno} | MSG : {message}',
    style='{'
)

这里{levelname:^9}表示将日志级别名称居中显示,总宽度固定为9,刚好匹配你示例中[ WARNING ](7个字符的级别名+两边各1个空格)的格式。

方案2:自定义Formatter子类(兼容旧版本)

如果需要兼容Python3.2以前的版本,或者需要更灵活的级别名处理逻辑,可以自定义Formatter子类,在格式化日志前修改record对象的levelname属性:

import logging

class CenteredLevelFormatter(logging.Formatter):
    def format(self, record):
        # 将levelname居中对齐,固定宽度9
        record.levelname = f"{record.levelname:^9}"
        # 调用父类的format方法完成剩余格式化
        return super().format(record)

# 使用自定义Formatter,原有的%风格格式字符串保持不变
formatter = CenteredLevelFormatter(
    '[ %(levelname)s ] %(name)s | Method : %(funcName)s | Line : %(lineno)s | MSG : %(message)s'
)

两种方案最终都能输出你期望的日志格式:

[ WARNING ] Someething Not Expected Happened Or Indicative To Prospective Problems !
[ DEBUG ] Diagnosing Supposes !
[ ERROR ] Serious Problems !

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:07:07