java-Log4j是否被Slf4j抛弃了?
看来log4j存在一些类加载问题(其中包括其他问题),在我看来,趋势是从log4j转向slf4j。 (Hibernate停止使用第一个来支持后者)
是真的吗
slf4j解决的log4j主要问题是什么?
slf4j是硬道理还是有更好的“下一个下一个log4j”行业标准?
更新:
因此,delfuego的这个答案使我感到困惑,您可以接受/反对吗?:
您似乎偶然发现了 log4j的主要问题(以及 Apache Commons Logging库), 即他们有一个荒谬的 很难发现和互动 使用正确的类加载器 正在使用。 有一个非常密集的 说明,并附有示例, 这里; 带回家的消息是 的主要驱动力之一 新的日志记录框架SLF4J是为了 彻底消除这些问题。 您 可能想交换它,看看是否 您的生活变得更加轻松。
log4j的更多类加载问题:[http://articles.qos.ch/classloader.html]
ruchirhhi asked 2020-02-13T07:55:52Z
6个解决方案
47 votes
Slf4j确实只是一个伐木的门面。 但是,来自相同作者的Log4打算由Logback继承。
更新:如果您想了解Slf4j的另一个好处,那就是事实,不再需要以下(丑陋的)构造来避免不必要地调用toString():
if (logger.isDebugEnabled()) {
logger.debug("Message: " + bigObject + ", " + anotherBigObject);
}
您可以改为使用参数化消息:
logger.debug("Message: {}, {}", bigObject, anotherBigObject);
另请参阅什么是最快的(不是)日志记录方式?
BalusC answered 2020-02-13T07:56:24Z
18 votes
Slf4J不是Log4j的替代品,而是提供了一个Facade来进行日志记录,因此您可以插入自己的日志记录框架。 它主要用于库。来自slf4j.org:
Java或Java的简单日志记录外观 (SLF4J)作为简单的外观或 各种日志的抽象 框架,例如 java.util.logging, log4j和logback,允许结束 用户插入所需的日志记录 部署时使用框架。
回答您的问题:框架正在采用Slf4j,但是在您的项目中,您可以继续使用Log4J(或任何其他)
EJB answered 2020-02-13T07:56:54Z
7 votes
首先:要点:Slf4j是前端日志记录(API),它可以在大多数主要的loggin系统下面使用:例如log4j或java.util.logging。 因此最好将sfl4j与commons-logging进行比较。
关于Log4j的状态,引自Java日志记录的状态(一年前)
我尚未意识到的一件事是,log4j开发实质上已经死了。 它目前的版本为1.2,而为了开发log4j 2.0而放弃了版本1.3的计划。 但是,2.0似乎没有在积极开发中。 值得注意的是,log4j项目的最初创始人CekiGülcü已转到slf4j(请参见下文)。
Kartoch answered 2020-02-13T07:57:24Z
6 votes
查看slf4j页面似乎并不能代替log4j-它仅允许您对整个应用程序使用相同的基础日志记录框架(例如log4j),从而允许库自动挂钩。
它看起来更像是Apache Commons Logging的替代品,而不是log4j。
Jon Skeet answered 2020-02-13T07:57:50Z
3 votes
我认为,SLF4J具有巨大的优势,您可以通过它提供的桥来统一使用的所有库的日志记录。 其他任何日志记录框架都不允许这样做。 这使项目可以平稳地迁移到SLF4J,而不必依赖于依赖项所做的日志记录框架选择。
Thomas Lötzer answered 2020-02-13T07:58:13Z
3 votes
Slf4j不是真正的日志记录外观。Slf4j不支持其实现程序的许多功能。简而言之,我在下面提到log4j示例。
Slf4j无法指定用户选择的配置文件,但会强制用户在众多Java根目录之一(每个Jar具有一个根目录加上JVM根目录和类或bin)中使用默认值(log4j.properties或log4j.xml)。 如果有两个JAR文件,则很难控制要安全使用哪个文件。
Slf4j无法支持所有Log4j级别,例如“致命”级别。 当将大型代码从Log4j切换到Slf4j时,需要进行大量的代码更改工作(例如,决定如何重新排列级别)。
必须选择两个关键的Jar文件(log4j-over-slf4j.jar或slf4j-log4j12.jar)。 如果同时使用classpath,将无法正常工作。 如果随机选择一个,则会丢失意外的功能(例如log4j-over-slf4j.jar不支持同一类的多个日志文件;例如,一个用于事件日志,一个用于原始数据日志)。
Steven S Wang answered 2020-02-13T07:58:47Z