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

use*_*949 7 java slf4j

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

Cek*_*eki 8

为消息类型要求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
Run Code Online (Sandbox Code Playgroud)

然后,当你写作

debug("hello", new Exception("world"));
Run Code Online (Sandbox Code Playgroud)

目前尚不清楚是否应使用变体2或变体3.

在任何情况下,使用现有的SLF4J API,您始终可以编写:

  logger.debug("{}", yourObject);
Run Code Online (Sandbox Code Playgroud)

如果底层日志记录框架是logback,那么所有appender都可以使用yourObject.其他日志记录框架不支持消息参数,因此SLF4J必须在调用底层框架之前格式化消息.