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

5 投票
1 回答
2010 浏览
提问于 2025-04-17 00:16

我想找一种方法,在Python的日志格式化器中进行部分字符串格式化。

当我尝试这样定义格式化器时:

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

我会遇到一个类型错误,提示“格式需要一个映射”,这很合理,因为解释器找不到'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')

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

有什么想法吗?

1 个回答

5

试试这个:

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

你需要把带有 %(...)s 字段的字符串传给 Formatter 方法。这里的 %% 会被解释成 %,所以可以这样使用。

撰写回答