Python日志中大括号后的填充字符串占位符

5

我目前在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

因此,级别名称的填充发生在方括号内部。相反,我希望填充括号之外,这样它看起来像这样:

[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”之间放置额外字符(如“[]”)的语法,也不能在将其传递给basicConfig()之前填充格式字符串。有没有办法实现我想要的效果?

1个回答

3

好的,我找到了一个解决方案,涉及自定义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)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接