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



类java.net.InetAddress不记录一行?

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

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

  2. 您希望INetAddress记录什么?创造如果你想记录某个特定类的创建,还有其他工具可以记录,不需要在代码中随意添加日志。这样的通用工具(一种可以记录某个特定类型的创建或某个特定方法的调用的通用工具,无论何时何地完成(将使您能够一次性记录所有核心类以及任何其他库中的任何其他类/方法所需的内容,而这些库不会以您想要的方式记录内容。

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

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

最新更新