我有同样的问题,在这篇文章中已经回答了
How do I print my Java object without getting "SomeType@2f92e0f4"?
我试图在日志中打印PutObjectRequest,这是打印对象参考值。但是,我不能添加toString()方法,因为我使用AWS的预定义类(PutObjectRequest
)。有没有办法打印那个对象中的值?
log.info("Sending request: {}", request);
答案 0 :(得分:2)
有没有办法打印该对象中的值?
您需要编写自己的方法来提取请求对象的相关组件(使用公共getter),对其进行适当格式化,并将该批次作为字符串返回。然后在request
对象上调用该方法,并将结果字符串传递给记录器而不是request
对象。
如果你需要深入研究私有状态(使用抽象 - 粉碎反射),那就更难了,如果请求类的实现细节发生变化,你就有可能破坏代码。
乏味。但是,没有一般的解决方案,AFAIK。
(如果您使用通用序列化方案,则可能会遇到某些组件不相关,或者不可序列化或大量组件的问题。)
更新 - 实际上,最好使用这样的自定义方法:
if (log.isInfoEnabled()) {
log.info("Sending request: {}", myFormat(request));
}
如果您不保护info(...)
电话,则无论登录级别如何,都会产生格式化的开销。