是否有任何apache utils打印数组一些可理解的字符串

时间:2013-04-03 07:04:20

标签: java logging apache-commons-beanutils

我在代码中使用org.slf4j.Logger进行一些日志记录。它有一些地方,我想看到数组的内容,主要是字符串数组,对象类型数组。 if对象类型主要使用toString()实现。
是否有任何apache utils或某些东西可以将数组提供给可理解的字符串?

2 个答案:

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

即可