为什么像 java.net.InetAddress 这样的 Java 类不记录任何内容?

Oli*_*ver 2 java logging

java.net.InetAddress 之类的类不记录一行是否有特殊原因?

对于某些情况,从 Java 库类获取一些调试信息可能会变得非常方便。

rzw*_*oot 5

  1. 有很多日志框架。Java 尝试添加自己的,但为时已晚,而且 Java 的内置日志记录还遥遥无期。这让我们回到:它应该使用什么?java.util.log,除了很少使用?slf4j?考虑到 julog 存在,它不是通用的,它会有点奇怪。又一个元层?

  2. 您希望 INetAddress 记录什么?创建?如果你想记录某个特定类的创建,还有其他工具可以做到这一点,没有必要在代码中乱写日志。这种通用工具(一种通用工具,可以在任何时间和每次完成时记录某些特定类型的创建或某些特定方法的调用)将一举让您能够记录您需要的所有内容核心类,以及任何其他库中的任何其他类/方法,它们不会以您想要的方式记录事物。

  3. 伐木绝对不是免费的。打开一个文件来写入数据实际上是非常昂贵的,并且必须忽略 knuth 的格言来编写许多核心库(过早优化是万恶之源——陈词滥调和过于简单化,但这是一句流行的说法)——因为各种代码使用核心库,因此必须在一定程度上进行微优化。如果默认情况下日志框架实际上并没有最终记录日志(例如由于级别设置),那么日志记录框架会变得更快,但是您仍然需要进行查找以检查您是否应该记录某事。

更一般地,对于大多数核心库堆栈来说,日志似乎不合适:日志最好用于引发重要事件(并且核心库不知道什么是重要的,根据定义,它几乎不是“终点”代码),并且跟踪进程的流程,但大多数核心库只做一个任务,这意味着“记录它”归结为“记录方法调用”,这让我们回到#2:你可以这样做,你不需要 java 核心显式包含日志行的代码。