我在 java 日志库世界中没有那么有经验。我开始使用休眠,然后发现我需要包含 apache commons 日志库和 sl4j 库。实际的日志库是 log4j - 所以我也包含了那个库。
在阅读了 apache commons logging 和 sl4j libs 之后,我了解到它们都代表了一个抽象层,用于使用另一个库(在我的例子中为 log4j)进行日志记录。
为什么需要 2 个抽象级别?
我在 java 日志库世界中没有那么有经验。我开始使用休眠,然后发现我需要包含 apache commons 日志库和 sl4j 库。实际的日志库是 log4j - 所以我也包含了那个库。
在阅读了 apache commons logging 和 sl4j libs 之后,我了解到它们都代表了一个抽象层,用于使用另一个库(在我的例子中为 log4j)进行日志记录。
为什么需要 2 个抽象级别?
在一个完美的世界里,这些多个日志 API 是不需要的,但不幸的是,没有明确的标准,所以不同的库(而且 Hibernate 是一个有很多依赖和子项目的大项目)使用不同的日志 API,作为用户,你必须提供所有这些。
准标准是 Log4J,直到 Sun 决定需要将自己的版本 (java.util.logging) 包含到 JDK 中。这使它成为一场双马赛跑,Commons Logging 旨在为两者(以及任何其他人)提供统一的界面。不幸的是,Commons Logging 也有一些缺点,所以目前最喜欢的是 SLF4J。SLF4J 也试图通过提供与所有其他 API 的桥梁来帮助清理混乱。
Hibernate 使用 slf4j而不是apache commons 日志记录。
遗留代码。
hibernate 内部充满了公共日志记录用法。从公共日志转移到所需日志库的最简单方法是添加 slf4j 层。现在你可以使用 Hibernate 中流行的日志库中的一个,它内部仍然使用公共日志的接口。还有另一个理由转向 slf4j。