java - Hibernate 使用 apache commons 日志记录和 slf4j - 为什么需要 2 个日志记录抽象层?

标签 java hibernate logging slf4j apache-commons-logging

我在 java 日志库领域没有那么丰富的经验。 我开始使用 hibernate,然后发现我需要包含 apache commons 日志库和 sl4j 库。 实际的日志记录库是 log4j - 所以我也包含了该库。

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

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

最佳答案

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

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

关于java - Hibernate 使用 apache commons 日志记录和 slf4j - 为什么需要 2 个日志记录抽象层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16881168/

相关文章:

Java SoftReference 奇怪的行为

java - 将对象分类到桶中如何表述为有效的 JPQL 表达式?

node.js - 如何在 Inno Setup 中的现有文本文件中追加新内容

C++ 日志包装器设计

Java 文件路径问题

Java io 库 : What is the difference between File. toString() 和 File.getPath()

java - 在哪里关闭 Elasticsearch 客户端连接?

java - 当这些表的值没有更改时,为什么 hibernate 会执行冗余更新语句?

java - 在javafx TableView中显示外键

java - 从小程序控制台中删除 Java 插件消息