Python日志格式化器中的部分字符串格式化
我想找一种方法,在Python的日志格式化器中进行部分字符串格式化。
当我尝试这样定义格式化器时:
formatter = logging.Formatter('[num-%d] %(levelname)s %(message)s' % (num,))
我会遇到一个类型错误,提示“格式需要一个映射”,这很合理,因为解释器找不到'levelname'和'message'。
当然,我希望'levelname'和'message'保持未格式化状态,让日志框架来处理。
我看到有两种其他方法可以解决这个问题:
format = '[num-' + str(num) + '] %(levelname)s %(message)s' % (num,)
format = '[num-%(num)d] %(levelname)s %(message)s' % dict(num=num, levelname='%(levelname)s', message='%(message)s')
不过,我觉得这两种解决方案都有点丑,我相信应该有更好的方法来只格式化字符串的一部分——无论是在Python中,还是使用Python内置的日志框架。
有什么想法吗?
1 个回答
5
试试这个:
formatter = logging.Formatter('[num-%d] %%(levelname)s %%(message)s' % (num,))
你需要把带有 %(...)s
字段的字符串传给 Formatter
方法。这里的 %%
会被解释成 %
,所以可以这样使用。