slf4j 没有 toString()

2024-01-07

当你做类似的事情时LOG.debug("Exported {}.", product)在 slf4j 中,它最终会在参数上调用 toString(),例如product.

由于某些原因,我无法在要用作参数的所有类上重写 toString() 。有些类来自第三方 jar,其他类也会在其他上下文中调用它们的 toString(),而我想要在日志语句中打印的信息不可用。

但是,我有一个用于调试目的的类,它有一个方法DebugFormatter.format(Object)它有一个很长的实例级联,它选择例程来查找有关该对象的一些有用的调试信息。

我的问题是:是否可以配置 slf4j 以便它调用这样的静态方法而不是 toString()?

当然,我可以在将对象作为参数传递给Logger.debug()但即使未启用相应的记录器,它也会被执行。所以我必须用它包围它if (LOG.isDebugEnabled())这意味着在 debug() 中使用参数的全部意义被忽略了。


您可以创建一个垫片,获取您的对象并调用DebugFormatter.format()从它的toString()功能。像这样的事情:

class DebugFormatObject {
  private final Object o;

  public static DebugFormatObject forDebug(Object o) {
    return new DebugFormatObject(o);
  }

  private DebugFormatObject(Object o) {
    this.o = o;
  }

  @Override
  public String toString() {
    return DebugFormatter.format(o);
  }
}

通过适当的静态导入,您的日志记录语句将变为:

LOG.debug("Exported {}.", forDebug(product));

这确实比直接传递对象的开销稍大,但这是一个很小的、恒定的开销——并且创建的对象将非常短暂。

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

slf4j 没有 toString() 的相关文章

随机推荐

  • Nodemailer 与 Gmail |出现错误:错误:无效登录:535-5.7.8 用户名和密码不被接受

    我正在尝试使用带有 Gmail 帐户的 Nodemailer 在我的应用程序中设置电子邮件验证 我的问题是它报告错误 指出我的用户名和密码尚未被接受 There was an error Error Invalid login 535 5
  • 如何检查数据库列中存在的字符串? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有带有字
  • 将 BigDecimal 格式化为最多 2 位小数的字符串,删除小数部分的 0

    我有一个 BigDecimal 数字 我只考虑它的小数点后两位 所以我使用以下方法截断它 bd bd setScale 2 BigDecimal ROUND DOWN 现在我想将其打印为字符串 但如果它是 0 则删除小数部分 例如 1 00
  • 如何解决延迟启用CheckJNI?

    我是 android 新手 正在使用 genymotion 模拟器 但突然我在 log cat 中遇到了延迟启用检查问题 并且我的应用程序崩溃了 我尝试在其他模拟器上运行它 但在 log cat 中仍然收到相同的消息 我搜索了很多网站但仍然
  • Java中如何检测字符集编码?

    有谁知道是否有一种简单的方法来检测Java中的字符集编码 在我看来 有些程序能够检测给定的数据使用哪个字符集 或者至少能够进行近似 我想底层机制必须解码每个字符集中的数据 并选择具有最少未定义字符的字符集 然后选择哪个字符集更常见以打破平局
  • 如何使用node.js和Request包禁用HTTP标头中的“withcredentials”?

    使用 Node js 和Request https github com mikeal request来自浏览器的包 通过浏览器化 http browserify org 我使用 CORS 在单独的域上执行 HTTP GET 请求 在服务器
  • Python 列表可变

    我试图使用Python术语来解释为什么会发生以下情况 有人可以解释为什么吗tmp变成 1 2 3 不保持原样 1 2 arr tmp 1 2 arr append tmp print arr 1 2 tmp append 3 print a
  • 用户注销后 PHP 会话不会销毁

    我正在尝试为我的 PHP 应用程序创建身份验证机制 但我很难销毁会话 我尝试取消设置先前在会话数组中设置的身份验证令牌 并通过以下方式销毁会话 session destroy 以及在销毁会话之前完全重置会话数组 我正在调用标头函数 并在函数
  • 为什么 php 将空字节添加到私有和受保护的属性名称中?

    我是 PHP 世界的新手 并从中学习php net http php net 我知道 当将对象转换为数组时 会在私有和受保护的属性名称周围添加空字节班级名称 or 星号键 附加在数组键中私有和受保护的属性名称之前 但我的问题是WHYphp
  • 如何在运行时计算代码的校验和?

    我有一个在计算机上运行的 C NET 应用程序 如何在运行时计算整个代码的校验和 Note 我不想计算正在使用的图像的校验和 而是计算实际的代码部分 我从来没有用过这个 但是 使用反射 您可以导航到获取ILAsByteArray http
  • 编译循环依赖是如何工作的?

    我用 Java 制作了这个示例 但我认为 未经测试 它也适用于其他 所有 语言 您有 2 个文件 第一的 M java public class MType XType x MType x null 其次 另一个文件 在同一目录中 XTyp
  • GHz 至 MIPS?有人粗略估计一下吗?

    从迄今为止我所做的研究中 我了解到 MIPS 高度依赖于正在运行的应用程序或语言 但是谁能给我对 MIPS 中 2 5 Ghz 计算机的最佳猜测 或者任何其他数量的 Ghz C 如果有帮助的话 MIPS 代表 每秒百万条指令 但对于现代计算
  • 显示 Android 的返回堆栈

    为了更好地理解 Android 的行为 我想了解有关返回堆栈概念的更多信息 有没有一种方法可以按返回堆栈中的顺序列出所有活动 这还应该包括所有其他正在运行的任务 我发现 Android Studio 0 5 1 中提供了此信息 查看 gt
  • 如何在android中使用itext库阅读pdf

    我是安卓世界的新手 我厌倦了使用 eclipse IDE 创建一个 android 项目 其中我尝试在 itext 库的帮助下阅读 pdf 文件 该 pgm 未显示任何输出 请告诉我如何更正代码 以便我可以从项目中 Assets 文件夹中存
  • dataLayer.push后数据什么时候发送到google

    我有一个单页电子商务应用程序 需要设置谷歌电子商务渠道 我的应用程序在跟踪代码管理器数据层中设置漏斗步骤 文档中没有任何内容表明数据层实际发送到 Google 跟踪代码管理器的时间 window dataLayer 使用以下内容开始页面 e
  • 如何/可以在 Jasper 报告模板中使用 base64 作为图像源?

    所以在我的 jrxml 文件中我有以下内容
  • PHP 5.3 中 ++ 运算符的奇怪行为

    观看以下代码 a Test echo a 这将输出 Tesu 问题是 为什么 我知道 u 在 t 之后 但为什么它不打印 1 PHP 文档 此外 变量正在递增 或递减将转换为 适当的数值数据 类型 因此 下面的代码将 返回 1 因为字符串
  • 最小化多个仓库发货数量的算法

    我在美国有 10 个仓库 他们每个人可能有也可能没有产品 A B C D E 库存 有人从我的网站订购了全部五件商品 我想尽量减少发送的货件数量 如何确定哪些物品要从哪些仓库发货 例如 某人订购了 A B C D 和 E 我在纽约有 A 和
  • XSL - 评估条件表达式是否是“捷径”?

    给定 XSL If 语句
  • slf4j 没有 toString()

    当你做类似的事情时LOG debug Exported product 在 slf4j 中 它最终会在参数上调用 toString 例如product 由于某些原因 我无法在要用作参数的所有类上重写 toString 有些类来自第三方 ja