使用 slf4j 打印数组只打印第一个元素

Printing an array with slf4j only prints the first element

我有以下代码:

private static final Logger logger = LoggerFactory.getLogger(Some.class);
...
String[] splits=someString.split("..");
logger.info("The string was split into <{}>",splits); // prints first element

使用 slf4j 打印数组全部内容的正确方法是什么?

问题在于以下代码

logger.info("The string was split into <{}>", splits);

您正在调用方法 info(String format, Object... arguments)。请注意,最后一个参数是可变参数。因此,您传递的数组被解释为可变参数的每个参数。

但是,在本例中,您希望传递一个数组作为第一个参数。一个简单的解决方法是将其转换为 Object.

String[] splits = { "foo", "bar" };
logger.info("The string was split into {}", (Object) splits);

将按预期记录 The string was split into [foo, bar]

我遇到了一个奇怪的问题,即为第一个占位符记录了整个参数列表 例如: log.info("Initializing Service. arg1={}, arg2={}, pid={}", arg1, arg2, arg3);

记录以下内容: 初始化服务。 build=[123456, main, 77378], branch=null, pid={}