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

问题描述:

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

当试图定义一个格式化的方式如下:
在Python日志格式化程序中部分字符串格式化

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

我会得到一个类型错误使用“格式要求的映射”,这是合理的解释无法找到“levelname”和'信息'。

当然,我希望'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')

不过,我觉得这两种解决方案有点丑,我相信有必须是更好的方式来格式化部分字符串 - 无论是在Python中,还是在Python内置日志框架中使用。

任何想法?

+0

重复http://stackoverflow.com/questions/4928526/python-format-string – Stefano

试试这个:

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

你得给Formatter方法的字符串%(...)s领域。 %%将解释为%,因此可以使用。

+0

很好,谢谢! – amito