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

28

我有如下代码:

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正确打印数组的全部内容?


2
@JimJim2000 你打印数组的方式是正确的,如果slf4j(如果由log4j、logback或任何其他实现支持)将输出数组的内容。因此,你需要告诉我们“不起作用”确切意味着什么。你看到了任何slf4j消息吗?有任何输出吗?你知道你正在调用String#split()方法接受一个正则表达式,并且“..”是具有含义的正则表达式吗? - Petr Janeček
2个回答

59

问题在于以下代码:

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],正如预期。


-2
我遇到了一个奇怪的问题,在第一个占位符上记录了整个参数列表 例如: log.info("初始化服务。arg1={}, arg2={}, pid={}", arg1, arg2, arg3);
日志记录如下所示: 初始化服务。build=[123456,main,77378],branch=null,pid={}

1
这怎么回答问题作者的问题呢?看起来更像是一个不同的问题。 - Ilario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接