【问题标题】:Partial String Formatting in Python Logging FormattersPython 日志格式化程序中的部分字符串格式化
【发布时间】:2011-11-02 19:19:14
【问题描述】:

我正在寻找一种在 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')

但是,我发现这两种解决方案都有些难看,而且我相信必须有更好的方法来格式化字符串的一部分 - 无论是在 Python 中,还是在 python 内置日志框架中使用。

有什么想法吗?

【问题讨论】:

标签: python string logging mapping formatter


【解决方案1】:

试试这个:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多