我在代码中使用org.slf4j.Logger进行一些日志记录。它有一些地方,我想看到数组的内容,主要是字符串数组,对象类型数组。 if对象类型主要使用toString()实现。
是否有任何apache utils或某些东西可以将数组提供给可理解的字符串?
答案 0 :(得分:4)
正如其他答案中所建议的,您可以使用Arrays.toString()为Array构造“有意义的”字符串表示。当然,假设您使用的是JDK 5 +
更加“正确”的结果应该是使用Arrays.deepToString(),如果它是包含在数组中的其他数组实例,则包含的数组也正确地转换为字符串。
如果你没有使用JDK5 +,在Apache Commons Lang中,你可以使用ArrayUtils.toString()
鉴于您已经提到了SLF4J Logger,有一些值得研究的内容。
当我们使用SLF4J Logger时,我们总是做类似
的事情logger.info("data is {}", data);
执行此操作而不是logger.info("data is " + data);
的原因是因为只有当记录器实际启用了INFO级别时,才能对日志消息进行延迟评估。当消息构建起来很昂贵时,它尤其有用。
然而,简单地使用Arrays.deepToString()会带走这个优势:
logger.info("data is {}", Arrays.deepToString(dataArray));
无论使用INFO级别启用记录器,都会发生昂贵的dataArray到字符串转换。
为了解决这个问题,您可以在记录前明确检查记录器级别:
if (logger.isInfoEnabled()) {
logger.info("data is {}", Arrays.deepToString(arrayData));
}
您也可以考虑制作这样的帮手(伪代码):
public class ArrayToStringHelper {
Object[] arrayData;
public ArrayToStringHelper(Object[] arrayData) {
this.arrayData = arrayData;
}
@Override
public String toString() {
return Arrays.deepToString(arrayData);
}
}
这样,Array to String转换会被延迟,直到实际需要它为止:
logger.info("data is {}", new ArrayToStringHelper(arrayData));
答案 1 :(得分:1)
无需任何第三方库来执行此操作。只需使用Arrays.toString