如何在 slf4j 中记录非字符串项
slf4j的方法似乎只接受字符串参数,使用它的方法时我是否必须将所有内容都转换为字符串?
It seems that slf4j's method only accepts string argument, do I have to convert everything to string when using its method?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
要求消息类型使用 String 而不是 Object 的主要原因是为了避免方法签名中的歧义。
采用以下签名:
那么,当您编写时
,并不清楚是否应该使用变体 2 或变体 3。
无论如何,使用现有的 SLF4J API,您始终可以编写:
如果底层日志记录框架是 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:
then, when you write
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:
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)
andaddKeyValue(String, Object)
methods .如果您正在谈论像
Logger.debug(String message)
这样的 1 个参数方法,那么是的。但还有其他方法,例如 Logger.debug(String format, Object[] args) 不需要此方法。我不确定为什么 sl4fj 的 API 是这样的(例如 log4j 的 API 不是这样),但它可能是以下一些组合:
(最后一个原则是,如果某件事是由一个不向某些设计委员会负责的人设计/实现的,那么他对风格等的意见比其他任何人的意见都更重要。)
If you are talking about the 1 argument methods like
Logger.debug(String message)
, then yes you do. But there are other methods such asLogger.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:
(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.)
尝试
然后确保您的 toString() 方法确实有意义
try
and then make sure your toString() methods are actually meaningful