Log4j是否被抛弃而支持Slf4j?

ruc*_*hhi 48 java log4j slf4j

似乎log4j有一些类加载问题(等等),在我看来趋势是从log4j移出slf4j.(Hibernate停止使用第一个支持后者)

  1. 这是真的吗?
  2. log4j中slf4j解决的主要问题是什么?
  3. slf4j是最后一个词还是有更好的"下一个下一个log4j"行业标准?

更新:

  • 所以delfuego的回答让我很困惑,你能接受/反对吗?:

您似乎偶然发现了log4j(以及Apache Commons Logging库)的主要问题,即他们在使用时发现并与正确的类加载器进行交互时非常困难.这里有一个非常密集的解释,有完整的例子; 带回家的信息是,新的日志框架SLF4J的主要推动力之一就是完全消除这些问题.你可能想要交换它,看看你的生活是否变得更容易.

Bal*_*usC 47

Slf4j确实只是一个日志记录.但是,Log4j旨在由同一作者的Logback取代.

更新:如果您想了解Slf4j的另一个好处,那就是不再需要以下(丑陋)构造来避免toString()不必要的调用:

if (logger.isDebugEnabled()) {
    logger.debug("Message: " + bigObject + ", " + anotherBigObject);
}
Run Code Online (Sandbox Code Playgroud)

您可以改为使用参数化消息:

logger.debug("Message: {}, {}", bigObject, anotherBigObject);
Run Code Online (Sandbox Code Playgroud)

另请参阅(不)记录的最快方法是什么?

  • 不,但它会停止执行toString,这会在将对象连接到字符串时发生.日志记录昂贵的主要问题不是对日志函数的调用,而是记录字符串的构造! (4认同)
  • 确切地说,logback是原始log4j创建者的log4j的一个分支,他希望成功登录log4j. (2认同)

EJB*_*EJB 18

Slf4J不是Log4j的替代品,而是提供了一个用于日志记录的Facade,因此您可以插入自己的日志框架.它主要用于图书馆.来自slf4j.org:

对于Java或(SLF4J)简单记录门面用作简单门面或抽象的各种日志框架,例如java.util.logging中,log4j的和的logback,允许最终用户在在部署时所需的日志框架插头.

回答你的问题:Slf4j现在被框架采用,但在你的项目中,你可以继续使用Log4J(或任何其他)

  • 那么Slf4J的本机实现可能优于Log4J,但其主要目的是将日志框架的选择与应用程序框架/库的选择分离.仅仅使用Slf4J来包装Log4J就不会修复你的类加载器问题. (2认同)

Kar*_*och 7

第一:重要的一点:Slf4j是前端日志记录(API),它可以在大多数主要的登录系统中使用:例如log4j或java.util.logging.因此,将sfl4j与commons-logging进行比较会更好.

关于Log4j的状态,引用来自java的日志记录(一年前)

我没有意识到的一件事是log4j开发基本上已经死了.目前版本为1.2,版本1.3的计划被放弃,转而开发log4j 2.0.但是,2.0似乎没有正在积极开发中.值得注意的是,log4j项目的最初创始人CekiGülcü已经转向slf4j(见下文).


Jon*_*eet 6

查看slf4j页面看起来它不会取代 log4j - 它只允许您为整个应用程序使用相同的底层日志记录框架(例如log4j),允许库自动挂钩.

它看起来更像是Apache Commons Logging的替代品,而不是log4j.