【问题标题】:Hibernate uses apache commons logging and slf4j - why are 2 logging abstraction layers needed?Hibernate 使用 apache commons logging 和 slf4j - 为什么需要 2 个日志抽象层?
【发布时间】:2013-05-28 16:26:05
【问题描述】:

我在 Java 日志库领域的经验并不丰富。 我开始使用休眠,然后发现我需要包含 apache commons 日志库和 sl4j 库。 实际的日志库是 log4j - 所以我也包含了那个库。

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

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

【问题讨论】:

    标签: java hibernate logging slf4j apache-commons-logging


    【解决方案1】:

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

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

    【讨论】:

    • 所以从技术上讲,hibernate 可以只使用 slf4j 编写而没有 apache commons 日志记录,同时仍然设法利用日志记录抽象?
    • 是的。如果 Sun 支持 LOG4J(或者是第一个参与该游戏的人),那么日志抽象可能根本就没有必要了。人们希望能够交换实现(所有日志记录 API 都使这成为可能),但如果每个人都同意一个 API,那就太好了。
    【解决方案2】:

    Hibernate 使用 slf4j over apache commons 日志记录。

    遗留代码。

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

    【讨论】:

    • 那么为什么不直接从休眠中使用 slf4j 而不使用 apache 公共日志记录呢?
    猜你喜欢
    • 2019-05-12
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多