【问题标题】:Padding string placeholder after bracket in python logging在python日志记录中括号后填充字符串占位符
【发布时间】:2018-06-15 15:02:27
【问题描述】:

我目前在 Python 中的日志记录字符串设置如下:

logging.basicConfig(
    format='[%(asctime)s] [%(levelname)-5s] %(message)s',
    level=logging.DEBUG
)

这会产生类似的东西:

[2018-06-15 10:54:15,021] [DEBUG] debug
[2018-06-15 10:54:15,022] [INFO ] info
[2018-06-15 10:54:15,022] [ERROR] error

所以 levelname 的填充出现在方括号。相反,我希望将填充 放在括号之外,所以它看起来像这样:

[2018-06-15 10:54:15,021] [DEBUG] debug
[2018-06-15 10:54:15,022] [INFO]  info
[2018-06-15 10:54:15,022] [ERROR] error

不幸的是,似乎没有将额外字符(如 [])放在 '%' 和 's' 之间的语法,我也不能在将格式字符串 传递给基本配置()。有没有办法完成我想要的?

【问题讨论】:

    标签: python string formatting


    【解决方案1】:

    好的,我找到了一个涉及自定义 LogRecordFactory 的解决方案。供参考:

    logging.basicConfig(
        format='[%(asctime)s] %(levelname_brackets)-7s %(message)s',
        level=logging.DEBUG
    )
    
    old_factory = logging.getLogRecordFactory()
    def record_factory(*args, **kwargs):
        record = old_factory(*args, **kwargs)
        record.levelname_brackets = '[{}]'.format(record.levelname)
        return record
    logging.setLogRecordFactory(record_factory)
    

    如果有更简单的方法,我会很感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-24
      • 2017-04-15
      • 2020-01-15
      • 2011-06-22
      • 2016-10-29
      • 2012-02-02
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多