使用新格式字符串记录变量数据

2023-12-01

我使用 python 2.7.3 的日志记录工具。这个Python版本的文档说:

日志记录包早于较新的格式化选项,例如 str.format() 和 string.Template。支持这些较新的格式选项...

我喜欢带有花括号的“新”格式。所以我正在尝试做类似的事情:

 log = logging.getLogger("some.logger")
 log.debug("format this message {0}", 1)

并得到错误:

类型错误:在字符串格式化期间并非所有参数都被转换

我想念这里什么?

附:我不想使用

log.debug("format this message {0}".format(1))

因为在这种情况下,无论记录器级别如何,消息都会被格式化。


EDIT:看看StyleAdapter@Dunes 答案中的方法与这个答案不同;它允许在调用记录器的方法(debug()、info()、error() 等)时使用替代格式样式,而无需样板。


来自文档 -使用替代格式样式:

记录调用(logger.debug()、logger.info() 等)只需要 实际日志消息本身的位置参数,以及 关键字参数仅用于确定如何处理选项 实际的日志记录调用(例如 exc_info 关键字参数 指示应该记录回溯信息,或者额外的 关键字参数来指示附加上下文信息 添加到日志中)。所以你不能直接使用进行日志记录调用 str.format() 或 string.Template 语法,因为内部日志记录 包使用 %-formatting 来合并格式字符串和变量 论据。在保留落后的情况下不会改变这一点 兼容性,因为现有的所有日志记录调用 代码将使用 % 格式的字符串。

And:

但是,有一种方法可以使用 {}- 和 $- 格式来 构建您的个人日志消息。回想一下,对于一条消息,您 可以使用任意对象作为消息格式字符串,并且 日志记录包将在该对象上调用 str() 来获取实际的 格式字符串。

将此复制粘贴到wherever module:

class BraceMessage(object):
    def __init__(self, fmt, *args, **kwargs):
        self.fmt = fmt
        self.args = args
        self.kwargs = kwargs

    def __str__(self):
        return self.fmt.format(*self.args, **self.kwargs)

Then:

from wherever import BraceMessage as __

log.debug(__('Message with {0} {name}', 2, name='placeholders'))

注意:实际格式化会延迟到需要时为止,例如,如果未记录 DEBUG 消息,则根本不会执行格式化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用新格式字符串记录变量数据 的相关文章

随机推荐

  • 从 uploadify jquery 插件获取文件名

    这是我的第一篇文章 我在这里尝试获取上传文件的名称 以便用户可以根据需要删除它 就像雅虎一样 uploadifysub1 uploadify uploader JS uploadify swf script JS uploadify php
  • .Net 连接池 MySQL 临时表

    我们有一个在 NET MVC Web 应用程序中使用的 MySQL 数据库 我们实施连接池 因为它具有一些巨大的性能优势 我们还在一些关键存储过程中完成了一些相当繁重的处理 他们创建几个临时表和用户变量 这些临时表和用户变量在连接的生命周期
  • gganimate 根据时间对多条路径进行动画处理

    我解析了电子游戏 反恐精英 中有关手榴弹投掷的一些数据 下面的示例数据显示我有关于手榴弹从哪里投掷 手榴弹爆炸的位置以及何时投掷手榴弹的位置 df lt data frame pos x c 443 6699994744587 459 45
  • 您可以根据范围创建分组吗? [复制]

    这个问题在这里已经有答案了 这与另一个问题 我认为这确实解决了一个更简单的问题 所以我在这里问更简单的问题 希望它能帮助我解决更复杂的问题 我希望能够在 linq to sql 查询中创建一个分组 该分组基于另一组数据中的一系列数据 不过
  • 连接到 Hive 时出错。Error:java.sql.SQLException: 找不到适用于 jdbc:hive2 的驱动程序:

    您好 我正在尝试从 Nodejs 连接到 hive 我用了https www npmjs com package jdbc安装 JDBC 我收到以下错误 错误 运行静态方法 java sql SQLException 时出错 没有合适的 找
  • 如何将谷歌字体连接到页面?

    我已经使用了 Google Fonts 中关于如何设置字体的建议 所以我做了以下动作 1 在页面添加此依赖 2 将CSS设置为body标签 html body font family Roboto sans serif background
  • Python/Scapy:仅嗅探传入数据包

    我可以在 Scapy 中仅嗅探传入数据包或仅嗅探传出数据包吗 无需在数据包字段上添加过滤器 简短的回答 不 Scapy 的嗅探功能不区分传入和传出的数据包 如果你想根据源mac进行过滤 你可以这样做 MYMAC 12 34 56 78 90
  • 如何创建每个点有两种颜色的散点图?

    我正在尝试绘制两个地面实况 and my在 matplotlib 中同时分类 目前 我只在应用后绘制真实情况tsne在特征空间上并使用以下代码添加边缘 from matplotlib collections import LineColle
  • 多维矩阵(/数组)的矩阵乘法 - 如何避免循环?

    我正在尝试使用包含要相乘的多个矩阵的数组来评估矩阵乘法 这可以通过使用 np dot 或 Py3 5 中的新 运算符 的两个矩阵轻松实现 但我正在努力扩展它以有效地评估我的多维数组 举个例子 假设我有形状为 5 3 3 的矩阵 A 和形状为
  • 样式表 HTML 定义中的 media="" 属性指的是什么?

    相信有些人已经看过以下内容 或者其他什么 但媒体属性实际上有什么作用呢 我创建了几个网站 但在链接样式表时从未使用过媒体属性 这是一个错误吗 谢谢 阿米特 w3可以最好地解释它 媒体类型与用于查看页面的媒体有关 如果有人正在打印该页面 pr
  • Cortex-A57可以双发出128位neon指令吗?

    Cortex A57 优化指南指出 大多数对 128 位向量数据进行操作的整数指令都可以双发出 第 24 页 整数基本 F0 F1 逻辑 F0 F1 执行吞吐量 2 然而 根据我们的内部 综合 基准测试 即使有大量可用的指令并行性 吞吐量似
  • C# 枚举到 postgres 枚举

    我目前正在使用 postgres 枚举 CREATE TYPE http action enum AS ENUM GET HEAD POST PUT DELETE CONNECT OPTIONS TRACE PATCH CREATE TAB
  • 在 Backbone.js 中实例化子视图时如何避免内存泄漏

    myView Backbone View extend event binding etc etc render function render some DOM anotherView Backbone View extend event
  • 使用 Java 从单个文件读取图像元数据

    我想从单个文件中读取图像元数据 我尝试了以下代码 http johnbokma com java obtaining image metadata html 当我运行它时 我得到build successful但什么也没发生 public
  • OS X Java .app 捆绑包无法打开其他应用程序?

    我为 OS X 编写了一个 Java SWT 应用程序 将其导出为 jar 并将其捆绑到 app 中 除了我的应用程序中的关键部分之外 一切都按预期工作 它需要打开其他应用程序 我试过了Runtime exec 也ProcessBuilde
  • 自动为条形图旁边的标签留出足够的空间

    我正在制作一个水平条形图ggplot2 标签位于条形右侧 如何为标签留出足够的空间 以免它们脱离图表 这个问题之前已经被问过很多次了 但我的问题是关于自动地 这意味着无需手动调整 条形图旁边的空间即可为标签留出足够的空间 该用例是一个闪亮的
  • shell 命令查找进程 ID 并附加到它?

    我想使用 ddd 附加到正在运行的进程 我手动执行的操作是 ps ax grep PROCESS NAME 然后我得到一个列表和 pid 然后输入 ddd PROCESS NAME THE PID 有没有一种方法可以直接输入一个命令 备注
  • ConstraintLayout:全屏居中视图,但限制宽度不与侧视图重叠

    我有一个类似组件实现的工具栏 在所有情况下我都遇到布局问题 它有一个左侧图标 一个标题和一个右侧菜单 按钮 我需要标题在全屏 或至少布局的整个宽度 上居中 但也不与其他组件重叠 因此标题的宽度必须受到左侧图标和右侧按钮的限制 我有两个中间解
  • IIS 中的 Comet 编程

    据说Comet编程不推荐使用IIS 如果这是真的 那么其他 Web 服务器如何能够通过 IIS 处理此问题 那么其他 Web 服务器还额外做了哪些事情来允许它们横向扩展呢 由于某种原因 这个神话仍然存在 当然可以使用 IIS 来完成此操作
  • 使用新格式字符串记录变量数据

    我使用 python 2 7 3 的日志记录工具 这个Python版本的文档说 日志记录包早于较新的格式化选项 例如 str format 和 string Template 支持这些较新的格式选项 我喜欢带有花括号的 新 格式 所以我正在