如何在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)
第一个代码块的格式行是:
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的子类,还有没有其他方法可以做到这一点呢?
2 个回答
16
试试这个格式的代码行:
logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
Python的日志记录器格式化器使用的是标准的Python 字符串格式化规则
120
像这样:
logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
附注:如果你想让信息左对齐,可以使用 [%(levelname)-8s]
这个格式。