如何在 slf4j 中记录非字符串项

发布于 2024-10-27 03:48:08 字数 51 浏览 2 评论 0原文

slf4j的方法似乎只接受字符串参数,使用它的方法时我是否必须将所有内容都转换为字符串?

It seems that slf4j's method only accepts string argument, do I have to convert everything to string when using its method?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

三生路 2024-11-03 03:48:08

要求消息类型使用 String 而不是 Object 的主要原因是为了避免方法签名中的歧义。

采用以下签名:

1) debug(Object) // a message
2) debug(Object, Object) // message followed by a parameter
3) debug(Object, Exception)  // message followed by an exception

那么,当您编写时

debug("hello", new Exception("world"));

,并不清楚是否应该使用变体 2 或变体 3。

无论如何,使用现有的 SLF4J API,您始终可以编写:

  logger.debug("{}", yourObject);

如果底层日志记录框架是 logback,那么 yourObject 将可供所有附加程序使用,不会发生变化。其他日志框架不支持消息参数,因此 SLF4J 必须在调用底层框架之前格式化消息。

更新 2024: SLF4J 2.0 中引入的 Fluent API 允许通过 addArgument(Object)addKeyValue(String, Object) 方法传递对象数据。

The main reason for requiring String instead of Object for the message type was to avoid ambiguity in the method signatures.

Takes the following signatures:

1) debug(Object) // a message
2) debug(Object, Object) // message followed by a parameter
3) debug(Object, Exception)  // message followed by an exception

then, when you write

debug("hello", new Exception("world"));

it is not clear if variant 2 or variant 3 should be used.

In any case, with the existing SLF4J API you can always write:

  logger.debug("{}", yourObject);

If the underlying logging framework is logback, then yourObject will be available to all appenders unchanged. Other logging frameworks do not support message parameters so SLF4J has to format the message before calling the underlying framework.

Update 2024: the fluent API introduced in SLF4J 2.0 allows passing Object data via addArgument(Object) and addKeyValue(String, Object) methods .

究竟谁懂我的在乎 2024-11-03 03:48:08

slf4j的方法似乎只接受字符串参数,我在使用它的方法时是否必须将所有内容都转换为字符串?

如果您正在谈论像 Logger.debug(String message) 这样的 1 个参数方法,那么是的。但还有其他方法,例如 Logger.debug(String format, Object[] args) 不需要此方法。

我不确定为什么 sl4fj 的 API 是这样的(例如 log4j 的 API 不是这样),但它可能是以下一些组合:

  • 试图迎合底层日志框架行为,
  • 试图最小化性能影响,以及
  • “实现者的特权” 。

(最后一个原则是,如果某件事是由一个不向某些设计委员会负责的人设计/实现的,那么他对风格等的意见比其他任何人的意见都更重要。)

It seems that slf4j's method only accepts string argument, do I have to convert everything to string when using its method?

If you are talking about the 1 argument methods like Logger.debug(String message) , then yes you do. But there are other methods such as Logger.debug(String format, Object[] args) that don't require this.

I'm not sure why sl4fj's APIs are like this (and for example log4j's APIs are not), but it is probably some combination of:

  • trying to cater for underlying logging framework behaviour,
  • trying to minimize the performance impact, and
  • "implementor's prerogative".

(The last is the principle that if something is being designed / implemented by one person who doesn't answer to some design committee, his opinions on style, etc hold greater weight than anyone else's.)

又爬满兰若 2024-11-03 03:48:08

尝试

String.valueOf(yourObject)

然后确保您的 toString() 方法确实有意义

try

String.valueOf(yourObject)

and then make sure your toString() methods are actually meaningful

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文