python - 如何在日志处理程序中指定 str.format() 样式?

标签 python logging string-formatting

在我的代码中,我在每个 LogRecord 上编写 dict-objects。其中一个键称为 my_msg,我想创建一个 StreamHandler,它只打印时间和 my_msg 键的值。 我已尝试以下操作,但收到错误消息:AttributeError: type object 'LogRecord' has no attribute 'levelname'

streamformatter = logging.Formatter(fmt='{}:\t{}'.format(logging.LogRecord.levelname, logging.LogRecord.message.get('my_msg'), datefmt='%H:%M:%S', style='{')

最佳答案

您需要将只是模板 传递给Formatter() 类。 稍后将使用该模板来格式化您的消息。您还需要使用命名插槽:

streamformatter = logging.Formatter(fmt='{levelname}:\t{my_msg}', datefmt='%H:%M:%S', style='{')

在创建 Formatter() 对象时,您不会对其调用 .format();那时还没有日志消息,也没有要填写的级别。

参见 logrecord attributes section默认情况下可用的名称;表格第二列中的任何 % 样式格式都应转换为新样式格式:

  • %(asctime)s 变为 {asctime}{asctime!s}
  • %(created)f 变为 {created:f}
  • %(lineno)d 变为 {lineno:d}

等等

关于python - 如何在日志处理程序中指定 str.format() 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21160191/

相关文章:

python - 未绑定(bind)的方法必须以实例作为第一个参数调用(而不是什么都没有)

python - 解析来自重定向 URL 的信息

python - 如何在网站上抓取嵌入的整数

php - 更改PHP error_log行为可能吗?

swift - 将进程标准输出重定向到 Swift 中的 Apple 系统日志工具

java - Log4j - 如何记录应用程序名称?

c# - 复选框内容中日期的字符串格式

c - 我的函数中的格式代码

java - 如何通过英文的 String.format 返回格式化的数字?

python - Pandas 数据框 reshape 类型转换