如何正确对齐Python日志中的级别字段.Formatter [英] How to right align level field in Python logging.Formatter
问题描述
我正在尝试在Python日志记录器中对齐日志记录级别字段,以便输出如下所示的结果:
[ 2011-10-14 13:47:51] [DEBUG] ---开始...(smtphandlers.py:96)
[2011-10-14 13:47:51] [INFO] ---第一件事先...(smtphandlers.py:97)
[2011-10-14 13:47:51] [警告] ---即将结束...(smtphandlers.py:98)
[2011-10-14 13:47:51] [DEBUG] ---结尾(smtphandlers.py:99)
取而代之:
[2011-10-14 13:47:51] [DEBUG] ---开始...(smtphandlers.py:96)
[2011-10-14 13:47:51] [INFO] ---第一件事先...(smtphandlers.py:97)
[2011-10-14 13:47:51] [警告] ---即将结束...(smtphandlers.py:98)
[2011-10-14 13:47:51] [DEBUG] --- ending(smtphandlers.py:99)
第一个块的格式是:
logging.Formatter([%(asctime)s] [%(levelname)s] ---%(消息)s(%(文件名)s:%(行否)s),%y-%m-%d%H:%M:%S)
如果我知道最大电平长度是8(例如:CRITICAL),那么我将右对齐到8个空格。
我想弄清楚如何实现这一点。由于%(levelname)s多于8个字符(直到后来才发生替换),所以以下情况失败。如果我使用类似{0:> 20}格式的%(levelname)s,那么它可以工作,但是比我需要或者想要的更多的是填充。
格式%(levelname)s+] -
logging.Formatter([%(asctime)s] [+{0:> 8} - %(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)
I'm currently trying to right align the logging level field in my Python logger so that output such as:
[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)
instead looks like:
[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)
The format line for the first block is:
logging.Formatter("[%(asctime)s] [%(levelname)s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
If I know the max level length is 8 (eg: CRITICAL), then I'll right align to 8 spaces. I'm trying to figure out how to achieve this. The following fails because "%(levelname)s" is more than 8 characters (the substitution doesn't happen until later). If I use something like "{0:>20}".format"%(levelname)s", then it works, but that is more padding than I need or want.
logging.Formatter("[%(asctime)s] [" + "{0:>8}".format"%(levelname)s" + "] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
Short of subclassing Formatter, anyone have a way to achieve this?
Like this:
logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
这篇关于如何正确对齐Python日志中的级别字段.Formatter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!