java - 为什么 Java 中的记录器很少有 System.out.println 有的 .toString()?

标签 java logging

我经常因为拥有而烦恼

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/

相关文章:

python - 使用 f 字符串样式格式规范记录 float (特别是 "msecs")时防止舍入(或至少长度溢出)

java - 将单词对象添加到 ArrayList 中

c# - 在 log4Net 中关闭记录器实例的正确方法

java - 在 bitbucket 管道上执行 gradle 后出现 "Could not complete execution for Gradle Test Executor 2"错误

java - 为什么 Java 的文件浏览器看起来如此古老?

Java Util Logging Hierarchy 原因?

c# - 帮我找到一个适用于 asp.net 应用程序的最小摩擦日志记录解决方案

logging - NET Core 未登录到控制台

java - 交换 stringbuffer 对象中的字符时出错

map 与列表中的 Java 缓存