Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是不是为了Slf4j而放弃了Log4j?_Java_Log4j_Slf4j - Fatal编程技术网

Java 是不是为了Slf4j而放弃了Log4j?

Java 是不是为了Slf4j而放弃了Log4j?,java,log4j,slf4j,Java,Log4j,Slf4j,log4j似乎有一些(在其他方面),在我看来,趋势是从log4j转向slf4j。(Hibernate停止使用第一个而使用后者) 这是真的吗 slf4j解决的log4j中的主要问题是什么 slf4j是最终决定还是有更好的“下一个log4j”行业标准 更新: 所以delfuego的这句话让我很困惑,你能接受/反对吗 你似乎无意中发现了这个问题 log4j(和 Apache Commons日志库), 也就是说他们有一个可笑的 难以发现和互动 使用正确的类装入器 正在使用中。有一个非常密集的区域 解

log4j似乎有一些(在其他方面),在我看来,趋势是从log4j转向slf4j。(Hibernate停止使用第一个而使用后者)

  • 这是真的吗
  • slf4j解决的log4j中的主要问题是什么
  • slf4j是最终决定还是有更好的“下一个log4j”行业标准
  • 更新:

    • 所以delfuego的这句话让我很困惑,你能接受/反对吗
    你似乎无意中发现了这个问题 log4j(和 Apache Commons日志库), 也就是说他们有一个可笑的 难以发现和互动 使用正确的类装入器 正在使用中。有一个非常密集的区域 解释,并附有示例, 在这里带回家的信息是 其中一个主要的驱动力 新的日志框架SLF4J将 彻底消除这些问题。你 可能想把它换进去看看 你的生活变得更轻松了

    • log4j的更多类加载问题:
    查看日志,它看起来不会取代log4j——它只允许您对整个应用程序使用相同的底层日志框架(例如log4j),允许库自动连接到该框架中


    它看起来更像是log4j的替代品。

    在我看来,SLF4J有一个巨大的优势,即您可以通过它提供的桥来统一您使用的所有库的日志记录。其他日志框架都不允许这样做。这允许项目顺利地移动到SLF4J,并忽略依赖项所做的日志框架选择。

    SLF4J不是Log4j的替代品,而是提供了一个日志框架,因此您可以插入自己的日志框架。它主要对图书馆有用。 从slf4j.org:

    Java或Java的简单日志外观 (SLF4J)用作简单的立面或 各种测井的抽象 框架,例如java.util.logging, log4j和logback,允许结束 用户可以插入所需的日志记录 部署时的框架


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

    首先:重要的一点:Slf4j是前端日志记录(API),它可以在大多数主要日志系统下面使用:例如Log4J或java.util.logging。因此,最好将sfl4j与进行比较

    关于Log4j的状态,引用自(一年前)

    有一件事我没有意识到,log4j开发实际上已经死了。它目前是1.2版,1.3版的计划被放弃,转而开发log4j 2.0。然而,2.0似乎并未处于积极开发阶段。值得注意的是,log4j项目的原始创始人Ceki Gülcü已经转到了slf4j(见下文)


    Slf4j实际上只是一个日志外观。然而,Log4j打算由同一作者继承

    更新:如果您想了解Slf4j的另一个优点,那么就不需要使用以下(丑陋的)构造来避免不必要地调用
    toString()

    if (logger.isDebugEnabled()) {
        logger.debug("Message: " + bigObject + ", " + anotherBigObject);
    }
    
    您可以改为使用参数化消息:

    logger.debug("Message: {}, {}", bigObject, anotherBigObject);
    

    另请参见

    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不支持同一类的多个日志文件;例如,一个用于事件日志,一个用于原始数据日志)

    所以这个答案令人困惑:它意味着slfJ毕竟解决了Log4j造成的问题。。。除了Facade特性之外,它还有一个比log4j更好的独立本机日志实现吗?SLF4J需要一个真正的日志实现。这可能仍然是Log4j,或者您可以使用Logback,它本机实现了SLF4J接口(SLF4J和Logback是由同一个人编写的),它只是一个门面。然而,有一个称为Logback的新实现,它被设计成SLF4J的第一类实现。值得注意的是,SLF4J、Log4J和Logback都是由同一个家伙创建的,他基本上认为Log4J被暂停了。他有一个关于StackOverflow(用户名是Ceki)的账户,并且倾向于在大多数Log4J/SLF4J线程中重申这一点。SLF4J的本机实现可能优于Log4J,但其主要目的是将日志框架的选择与应用程序框架/库的选择解耦。仅仅使用Slf4J来包装Log4J并不能解决您的类加载器问题。@EJB:什么类加载器问题?参考文章是关于Jakarta Commons日志的。据我所知,SLF4J本身不可能优于Log4J,因为它本身没有功能——它必须与真正的日志库捆绑在一起(事实上,其中之一就是Log4J)。+1:几天前我有一个非常类似的问题,并开始使用Logback,它在后台使用SLF4J。?!varargs不会停止函数的执行。。。是吗?不是,但它确实停止了toString的执行,这是在将对象连接到字符串时发生的。日志成本高昂的主要问题不是对log函数的调用,而是