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

2022-09-02 21:42:18

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

这个记录器有什么新内容,它是如何更好的?


答案 1

虽然它们之间可能存在细微的差异,但最重要的区别是(在模块中)是一个门面,而(在)是一个实现System.Loggerjava.basejava.util.logging.Loggerjava.logging

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

从 JDK 9 开始,模块图中可以没有,这确实使您可以自由使用任何想要的实现,而无需在 JDK 映像中拥有无用的包。如果存在,则将其用作默认后端,除非存在其他后端。如果不存在后端,它将只打印到 。java.loggingjava.loggingSystem.err


答案 2
  • java.lang.System.Logger在 Module java.base 中定义,而在 Module java.logging 中定义java.util.logging.Logger
  • 增强了外部框架支持,如 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 |
+--------------------------+-----+-------+-------+------+---------+--------+-----+

如果你想知道背后的动机,我强烈建议你阅读JEP 264:平台日志记录API和服务java.lang.System.Logger


推荐