Python日志格式化程序中的部分字符串格式

时间:2011-08-24 13:06:24

标签: python string logging mapping formatter

我正在寻找一种在Python日志格式化程序中执行部分字符串格式化的方法。

尝试按以下方式定义格式化程序时:

formatter = logging.Formatter('[num-%d] %(levelname)s %(message)s' % (num,))

我会得到一个带有“格式需要映射”的TypeError,这是合理的,因为解释器找不到'levelname'和'message'。

当然,我希望'levelname'和'message'保持未格式化,以便日志框架能够处理。

正如我所看到的,还有另外两种方法可以解决这个问题:

  1. format = '[num-' + str(num) + '] %(levelname)s %(message)s' % (num,)
  2. format = '[num-%(num)d] %(levelname)s %(message)s' % dict(num=num, levelname='%(levelname)s', message='%(message)s')
  3. 但是,我觉得这两种解决方案都有些难看,我相信必须有一种更好的方法来格式化部分字符串 - 无论是在Python中,还是在python内置日志框架中使用。

    任何想法?

1 个答案:

答案 0 :(得分:5)

试试这个:

formatter = logging.Formatter('[num-%d] %%(levelname)s %%(message)s' % (num,))

您必须为Formatter方法提供包含%(...)s字段的字符串。 %%将解释为%,因此可以使用。