java.util.logging.Logger 和 java.lang.System.Logger 之间的区别
Java 9引入了一个新的记录器,即java.lang.System.Logger
,但我们总是有java.util.logging.Logger
。
这个记录器有什么新内容,它是如何更好的?
Java 9引入了一个新的记录器,即java.lang.System.Logger
,但我们总是有java.util.logging.Logger
。
这个记录器有什么新内容,它是如何更好的?
虽然它们之间可能存在细微的差异,但最重要的区别是(在模块中)是一个门面,而(在)是一个实现。System.Logger
java.base
java.util.logging.Logger
java.logging
这背后的核心思想是库作者在他们的代码中编写无依赖性日志记录,并让该库的每个用户提供他们最喜欢的实现。这也意味着您的整个应用程序将使用相同的日志记录框架,而不必调整代码库中每个库的记录器。
从 JDK 9 开始,模块图中可以没有,这确实使您可以自由使用任何想要的实现,而无需在 JDK 映像中拥有无用的包。如果存在,则将其用作默认后端,除非存在其他后端。如果不存在后端,它将只打印到 。java.logging
java.logging
System.err
java.lang.System.Logger
在 Module java.base
中定义,而在 Module java.logging
中定义java.util.logging.Logger
与以下项相比,日志记录级别的变化完全不同:util.logging.Logger
+--------------------------+-----+-------+-------+------+---------+--------+-----+
| System.Logger Levels | ALL | TRACE | DEBUG | INFO | WARNING | ERROR | OFF |
+--------------------------+-----+-------+-------+------+---------+--------+-----+
| java.util.logging Levels | ALL | FINER | FINE | INFO | WARNING | SEVERE | OFF |
+--------------------------+-----+-------+-------+------+---------+--------+-----+
如果你想知道背后的动机,我强烈建议你阅读JEP 264:平台日志记录API和服务java.lang.System.Logger