Logback是否足够成熟以取代log4j?

时间:2012-07-17 09:50:16

标签: java log4j slf4j logback

我在thisthis上已经阅读了类似的问题。但他们大约四岁了!

此外,我还阅读了this logback页面,其中提供了一些关于为什么选择logback over log4j的非常好的信息。

我希望为具有以下技术堆栈的项目实现日志框架 -

  • 弹簧
  • 休眠
  • 的Maven
  • Tomcat的
  • 恢复

我已经决定使用slf4j作为外观,所以这个问题是关于是否使用slf4j + log4j或slf4j + logback(我知道logback本身使用slf4j)。

我正在寻找的是 -

  • 有没有人有过使用Logback的经验,证明它不像log4j那样成熟或高效?
  • 与多线程环境中的log4j相比,它是如何公平的?
  • 能够使用logback / log4j logging
  • 替换tomcat-default jul日志记录
  • 能够将日志记录配置合并到maven多模块项目的公共文件中
  • Logback声称它比log4j快10倍,是否有人验证过该声明? (作为我研究的一部分,我计划运行一些测试来衡量绩效,并将发回我的结果)

编辑:我在很多地方读过(下面的答案之一也说明了这一点),log4j已经死亡/已弃用。与此相反,log4j刚刚发布了2.0版本的alpha version。所以我不买那个论点。

1 个答案:

答案 0 :(得分:10)

LogBack成功登陆Log4J,它来自制作Log4J的作者。 Log4J目前已被弃用。

以下是SLF4J / LogBack素数的示例:

Log4J(当前)

Object entry = new SomeObject();
logger.debug("The new entry is "+entry+".");

以下是执行的任务:

  1. Java在变量条目上调用toString方法以获取String文字表示。 Java初始化堆中的空间以保存String对象。
  2. Java基于上面的String创建一个新的String,其中包含“新条目为”和“。”。 Java初始化空间以保存更新的String文字。
  3. Java将新构造的String对象作为输入参数传递给Log4J。 Log4J检查当前日志记录级别是否为DEBUG及以上。 (假设它在logging.xml描述符中设置为INFO)
  4. Log4J不会将字符串文字打印到日志中,因为日志记录级别设置为INFO。 (因此,所有关于1 - 2的工作都被浪费了)
  5. SLF4J / LogBack(新)

    Object entry = new SomeObject();
    logger.debug("The new entry is {}.", entry);
    

    以下是执行的任务:

    1. Java传递String对象“新条目为{}。”并将对象条目作为输入参数传递给SLF4J。 SLF4J检查当前日志记录级别是否为DEBUG及以上。 (假设它在logging.xml描述符中设置为INFO)
    2. Log4J不会将字符串文字打印到日志中,因为日志记录级别设置为INFO。
    3. http://www.slf4j.org/faq.html#logging_performance

      能否用logback / log4j loggin替换tomcat-default jul日志?

        

      是的,请使用SLF4J。