python - 如何在 Python logging.Formatter 中右对齐级别字段

我目前正在尝试右对齐 Python 记录器中的日志记录级别字段,以便输出如下:

[2011-10-14 13:47:51] [DEBUG] --- starting... (smtphandlers.py:96)
[2011-10-14 13:47:51] [INFO] --- first things first... (smtphandlers.py:97)
[2011-10-14 13:47:51] [WARNING] --- about to end... (smtphandlers.py:98)
[2011-10-14 13:47:51] [DEBUG] --- ending (smtphandlers.py:99)

看起来像:

[2011-10-14 13:47:51] [   DEBUG] --- starting... (smtphandlers.py:96)
[2011-10-14 13:47:51] [    INFO] --- first things first... (smtphandlers.py:97)
[2011-10-14 13:47:51] [ WARNING] --- about to end... (smtphandlers.py:98)
[2011-10-14 13:47:51] [   DEBUG] --- ending (smtphandlers.py:99)

第一个 block 的格式行是:

logging.Formatter("[%(asctime)s] [%(levelname)s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")

如果我知道最大级别长度为 8(例如:CRITICAL),那么我将右对齐到 8 个空格。 我试图弄清楚如何实现这一目标。以下失败,因为“%(levelname)s”超过 8 个字符(替换直到稍后才会发生)。如果我使用“{0:>20}”.format“%(levelname)s”之类的东西,那么它可以工作,但这比我需要或想要的填充更多。

logging.Formatter("[%(asctime)s] [" + "{0:>8}".format"%(levelname)s" + "] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")

缺少子类化Formatter,有人有办法实现吗?

最佳答案

像这样:

logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")

https://stackoverflow.com/questions/7771912/

相关文章:

c# - Visual Studio 格式化整个文件?

hadoop - hadoop namenode 格式到底是什么?

c# - 如何将百分比字符串转换为双倍?

visual-studio - 如何更改 Visual Studio 自动格式

powershell - 哈希表数组上的格式表

algorithm - 模糊日期算法

javascript - 如何在 chrome 控制台中完全打印大数组?

objective-c - 在 Objective C 中格式化 float

string - 在 Excel 中将时间字段转换为字符串

android - 格式化日历日期