如何在Python logging.Form中右对齐level字段

2024-05-08 23:08:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正试图右对齐Python记录器中的logging level字段,以便输出如下:

[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)

第一个块的格式行是:

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

如果我知道最大级别长度是8(例如:临界),那么我将右对齐到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")

除了子类化格式化程序之外,还有谁能实现这一点?


Tags: topydebuginfoformatterloggingendingend
2条回答

像这样:

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

尝试使用此格式行:

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

python日志格式化程序使用标准pythonstring formatting rules

相关问题 更多 >

    热门问题