看来slf4j的方法只接受字符串参数,使用它的方法时是否必须将所有内容都转换为字符串?
问问题
9632 次
3 回答
13
消息类型需要 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 将对所有的 appender 都可用。其他日志框架不支持消息参数,因此 SLF4J 必须在调用底层框架之前格式化消息。
于 2011-03-29T08:40:17.480 回答
2
看来slf4j的方法只接受字符串参数,使用它的方法时是否必须将所有内容都转换为字符串?
如果您正在谈论 1 参数方法Logger.debug(String message)
,那么是的。但是还有其他方法,例如Logger.debug(String format, Object[] args)
不需要这个。
我不确定为什么 sl4fj 的 API 是这样的(例如 log4j 的 API 不是),但它可能是以下几种组合:
- 试图迎合底层的日志框架行为,
- 尽量减少对性能的影响,以及
- “实施者的特权”。
(最后一个原则是,如果某个东西是由一个不向某个设计委员会负责的人设计/实施的,那么他对风格等的看法比其他任何人都更重要。)
于 2011-03-29T00:10:43.217 回答
0
尝试
String.valueOf(yourObject)
然后确保您的 toString() 方法实际上是有意义的
于 2011-03-28T23:21:20.003 回答