我正在我的代码中使用 org.slf4j.Logger 进行一些日志记录。它出现在某些地方,我想查看数组的内容,其中主要是字符串数组,对象类型数组。如果对象类型主要使用 toString() 实现。
是否有任何 apache utils 或将数组提供给可理解字符串的东西?
问问题
1215 次
2 回答
4
正如其他答案中所建议的那样,您可以使用 Arrays.toString() 为数组构造“有意义的”字符串表示形式。当然,假设你使用的是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 到 String 的转换被延迟到实际需要时:
logger.info("data is {}", new ArrayToStringHelper(arrayData));
于 2013-04-03T07:29:41.447 回答
2
无需任何第三方库来执行此操作。只需使用Arrays.toString
于 2013-04-03T07:05:27.690 回答