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
相关产品推荐
相关产品推荐

