如何正确对齐Python日志中的级别字段.Formatter [英] How to right align level field in Python logging.Formatter

查看:1837
本文介绍了如何正确对齐Python日志中的级别字段.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆