似乎log4j有一些class loading issues(等等),在我看来,趋势是从log4j移出slf4j。 (Hibernate停止使用第一个支持后者)
更新:
你似乎偶然发现了 log4j的主要问题(和 Apache Commons Logging库), 即他们有一个可笑的 很难发现和互动 与正确的类加载器一样 正在使用。有一个非常密集的 解释,附有例子, 这里; 带回家的消息就是这样 的主要推动力之一 新的日志框架SLF4J是 完全消除这些问题。你 可能想要交换它,看看是否 你的生活变得更轻松了。
答案 0 :(得分:47)
Slf4j确实只是一个日志记录。但是,Log4j旨在由同一作者的Logback继承。
更新:如果您想了解Slf4j的另一个好处,那就是不再需要以下(丑陋)构造来避免不必要地调用toString()
:
if (logger.isDebugEnabled()) {
logger.debug("Message: " + bigObject + ", " + anotherBigObject);
}
您可以使用参数化消息:
logger.debug("Message: {}, {}", bigObject, anotherBigObject);
答案 1 :(得分:18)
Slf4J不是Log4j的替代品,而是提供了一个用于日志记录的Facade,因此您可以插入自己的日志框架。它主要用于图书馆。 来自slf4j.org:
Java或Java的简单日志外观 (SLF4J)作为一个简单的外观或 各种日志记录的抽象 框架,例如java.util.logging中, log4j和logback,允许结束 用户插入所需的日志记录 部署时的框架。
回答你的问题:Slf4j现在被框架采用,但在你的项目中,你可以继续使用Log4J(或任何其他)
答案 2 :(得分:7)
首先:重点:Slf4j是前端日志记录(API),它可以在大多数主要登录系统下使用:例如log4j或java.util.logging。所以最好将sfl4j与commons-logging进行比较。
关于Log4j的状态,引自The state of java logging(一年前)
我没有意识到的一件事是log4j开发基本上已经死了。目前版本为1.2,版本1.3的计划被放弃,转而开发log4j 2.0。但是,2.0似乎没有正在积极开发中。值得注意的是,log4j项目的最初创始人CekiGülcü已经转向slf4j(见下文)。
答案 3 :(得分:6)
查看slf4j page它看起来不会替换 log4j - 它只允许您为整个应用程序使用相同的底层日志记录框架(例如log4j),允许库自动挂钩。
它看起来更像是Apache Commons Logging的替代品,而不是log4j。
答案 4 :(得分:3)
在我看来,SLF4J具有巨大的优势,您可以统一通过它提供的桥接器使用的所有库的日志记录。其他任何日志记录框架都不允许这样做。这允许项目顺利移动到SLF4J并忽略依赖关系所做的日志框架选择。
答案 5 :(得分:3)
Slf4j不是真正的日志记录。 Slf4j不支持其实现者的许多功能。 简而言之,我在下面提到log4j示例。