java.util.logging.Logger 和 java.lang.System.Logger 的区别

Mor*_*hai 12 java logging java-9

Java 9 引入了一个新的记录器,即java.lang.System.Logger但我们总是有java.util.logging.Logger.

这个记录器有什么新东西,它是如何变得更好的?

Mor*_*hai 7

虽然它们之间可能存在细微差别,但最重要的区别是System.Logger(in java.basemodule) 是facade,而java.util.logging.Logger(in java.logging) 是implementation

这背后的核心思想是让库作者在他们的代码中编写无依赖日志记录,并让该库的每个用户提供他们最喜欢的实现。这也意味着您的整个应用程序将使用相同的日志记录框架,而不必调整代码库中每个库的记录器。

由于 JDK 9 可能没有java.logging在模块图中,这确实让您可以使用任何您想要的实现,甚至在 JDK 映像中也没有无用的包。如果java.logging存在,它将用作默认后端,除非存在不同的后端。如果没有后端存在,它只会打印到System.err.


Vis*_*tna 6

  • java.lang.System.Logger在模块中定义java.base 而在模块java.util.logging.Logger中定义 java.logging
  • 外部框架支持如 SLF4J 或 Log4J 得到增强。
  • 处理引导程序问题的能力,以便平台类可以在日志使用者初始化之前记录消息。

与以下相比,日志记录级别的变化大不相同util.logging.Logger

+--------------------------+-----+-------+-------+------+---------+--------+-----+
|   System.Logger Levels   | ALL | TRACE | DEBUG | INFO | WARNING | ERROR  | OFF |
+--------------------------+-----+-------+-------+------+---------+--------+-----+
| java.util.logging Levels | ALL | FINER | FINE  | INFO | WARNING | SEVERE | OFF |
+--------------------------+-----+-------+-------+------+---------+--------+-----+
Run Code Online (Sandbox Code Playgroud)

如果你想知道背后的动机java.lang.System.Logger,我强烈建议你阅读JEP 264: Platform Logging API and Service