如何打印预定义的java对象?

时间:2017-01-23 03:21:24

标签: java

我有同样的问题,在这篇文章中已经回答了 How do I print my Java object without getting "SomeType@2f92e0f4"? 我试图在日志中打印PutObjectRequest,这是打印对象参考值。但是,我不能添加toString()方法,因为我使用AWS的预定义类(PutObjectRequest)。有没有办法打印那个对象中的值?

log.info("Sending request: {}", request);

1 个答案:

答案 0 :(得分:2)

  

有没有办法打印该对象中的值?

您需要编写自己的方法来提取请求对象的相关组件(使用公共getter),对其进行适当格式化,并将该批次作为字符串返回。然后在request对象上调用该方法,并将结果字符串传递给记录器而不是request对象。

如果你需要深入研究私有状态(使用抽象 - 粉碎反射),那就更难了,如果请求类的实现细节发生变化,你就有可能破坏代码。

乏味。但是,没有一般的解决方案,AFAIK。

(如果您使用通用序列化方案,则可能会遇到某些组件不相关,或者不可序列化或大量组件的问题。)

更新 - 实际上,最好使用这样的自定义方法:

if (log.isInfoEnabled()) {
    log.info("Sending request: {}", myFormat(request));
}

如果您不保护info(...)电话,则无论登录级别如何,都会产生格式化的开销。