我经常因为拥有而烦恼
System.out.println(someObject);
并且,当将其更改为使用所需的任何记录器时
日志信息(someObject);
并且必须添加 .toString() 以使其编译
LOG.info(someObject.toString());
我不记得曾经使用过一个记录器,它不只是接受一个对象并尝试对其执行 .toString() 操作,这让我想知道是否有特定的原因。我肯定不会是唯一一个因为必须将 .toString() 添加到所有内容而烦恼的人吧?
最佳答案
关键是理解日志记录的目的。记录器用于打印关于应用程序中发生的任何事件的人类可读的英文消息。日志记录 API 是按照这个基本原则构建的
LOG.info(someObject.toString());
上面一行的问题是日志记录的基本概念与您想要实现的有些不同。您想记录一个已经不是人类可读实体的对象,然后通过将其转换为字符串使其工作,或者您可以实现 toString() 方法,或者最后您可以查看其中一个重载函数
public void info(String format, Object... arguments)
直接记录一个对象主要是由开发人员在他们想要调试时完成的,让我们说出对象的内容或类似的东西,所以实现这一点的最好方法是正确实现 toString() 方法。
我还建议查看 Project Lombok ,它提供了 bean 的常见 hashCode() 和 toString() 函数的现成使用实现,因此您不必逐一检查代码并实现方法。
关于java - 为什么 Java 中的记录器很少有 System.out.println 有的 .toString()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29077491/