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

时间:2016-09-20 09:02:34

标签: java slf4j

我有以下代码:

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 个答案:

答案 0 :(得分:24)

问题在于使用以下代码

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

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

但是,在这种情况下,您希望将数组作为第一个参数传递。一个简单的解决方法是将其强制转换为Object

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

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

答案 1 :(得分:0)

我面临一个奇怪的问题,即为第一个占位符记录了整个参数列表 例如: log.info(“正在初始化服务。arg1= {},arg2 = {},pid = {}”,arg1,arg2,arg3);

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