Pythons日志格式字符串是如何工作的?

时间:2018-01-10 15:38:16

标签: python logging

我见过the docs,但我不明白。

当我有一个像

这样的日志格式字符串时
'%(asctime)s %(levelname)-8s %(name)-15s %(message)s'

括号后的s是什么意思? -8s会产生什么影响?

从输出看,我认为这是字符串的最小长度。但为什么不是通常的格式化语法

'{asctime} {levelname:<8} {name:<15} {message}'

使用?

是否可以在其中包含自定义值(例如,标识当前处理的元素类型的ID),或者这必须在消息中?

1 个答案:

答案 0 :(得分:4)

  

但为什么不使用通常的格式化语法?

你可以使用它。只需在配置日志记录时指定关键字参数style='{'。他们没有将其更改为默认值,以便保持向后比较(日志记录模块早于str.format样式格式化)

  

括号后面的s是什么意思?

&#34; S&#34;表示使用普通 s 表示。比较&#34; d&#34;对于 d igits。这是printf样式语法。

  

-8s有什么影响?

左对齐,填充到8宽

>>> '%(foo)-8s' % {'foo': 'hello'}
'hello   '
  

是否可以在其中包含自定义值(例如,标识当前处理的元素类型的ID),或者这必须在消息中?

是的,但是不要试图让stdlib日志记录来做这些事情。直接转到structlog