6

我已经阅读了关于 SO like thisthis的类似问题。但是他们大约四岁!

我还阅读了这个logback 页面,其中有一些关于为什么选择 Logback 而不是 log4j 的非常好的信息。

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

  • 春天
  • 休眠
  • 马文
  • 雄猫
  • 休息

我已经决定使用 slf4j 作为门面,所以这个问题是关于是使用 slf4j + log4j 还是 slf4j + logback(我知道 logback 原生使用 slf4j)。

我正在寻找的是以下 -

  • 有没有人有过使用 Logback 的经验证明它不如 log4j 成熟或高效?
  • 与多线程环境中的 log4j 相比,它如何公平?
  • 能够用 logback/log4j 日志记录替换 tomcat-default jul 日志记录
  • 能够将日志记录配置整合到 Maven 多模块项目的通用文件中
  • Logback 声称它比 log4j 快 10 倍,有人验证过这个说法吗?(作为我研究的一部分,我确实计划进行一些测试来衡量性能并将回传我的结果)

编辑:我在很多地方都读过(下面的答案之一也说明了这一点)log4j 已死/已弃用。与此相反,log4j 刚刚发布了其 2.0 版本的alpha 版本。所以我不认同这种说法。

4

1 回答 1

11

LogBack 是 Log4J 的成功之作,它来自于制作 Log4J 的作者。Log4J 目前已弃用。

这是 SLF4J / LogBack 质数的示例:

Log4J(当前)

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

以下是执行的任务:

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

SLF4J / LogBack(新)

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

以下是执行的任务:

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

http://www.slf4j.org/faq.html#logging_performance

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

是的,与 SLF4J 一起使用。

于 2012-07-17T10:00:36.970 回答