2

我在 java 日志库世界中没有那么有经验。我开始使用休眠,然后发现我需要包含 apache commons 日志库和 sl4j 库。实际的日志库是 log4j - 所以我也包含了那个库。

在阅读了 apache commons logging 和 sl4j libs 之后,我了解到它们都代表了一个抽象层,用于使用另一个库(在我的例子中为 log4j)进行日志记录。

为什么需要 2 个抽象级别?

4

2 回答 2

2

在一个完美的世界里,这些多个日志 API 是不需要的,但不幸的是,没有明确的标准,所以不同的库(而且 Hibernate 是一个有很多依赖和子项目的大项目)使用不同的日志 API,作为用户,你必须提供所有这些。

准标准是 Log4J,直到 Sun 决定需要将自己的版本 (java.util.logging) 包含到 JDK 中。这使它成为一场双马赛跑,Commons Logging 旨在为两者(以及任何其他人)提供统一的界面。不幸的是,Commons Logging 也有一些缺点,所以目前最喜欢的是 SLF4J。SLF4J 也试图通过提供与所有其他 API 的桥梁来帮助清理混乱。

于 2013-06-02T08:54:39.377 回答
1

Hibernate 使用 slf4j而不是apache commons 日志记录。

遗留代码。

hibernate 内部充满了公共日志记录用法。从公共日志转移到所需日志库的最简单方法是添加 slf4j 层。现在你可以使用 Hibernate 中流行的日志库中的一个,它内部仍然使用公共日志的接口。还有另一个理由转向 slf4j。

于 2013-06-02T08:56:05.350 回答