【问题标题】:Compare log4j and Logger比较 log4j 和 Logger
【发布时间】:2009-09-03 20:56:27
【问题描述】:

JDK 的 Logger 与 Apache 的 log4j 相比如何?

哪一个更适合以 Java 6 为目标的新项目?它们在灵活性和可配置性方面的比较如何?

【问题讨论】:

  • 几乎任何东西都比java.util.logging 好,即使这意味着引入第 3 方依赖项。

标签: java logging log4j


【解决方案1】:

在我看来,JDK Logger 唯一要做的就是它是 JDK 的一部分,因此它不会添加外部依赖项。如果只能在这两者之间进行选择,我会选择 Log4j。它在附加程序、知道它的人数(在我的轶事观察中)和更好的 API(这也是主观的)方面仍然有更好的支持。

今天开始一个项目,最诱人的做法是使用 slf4j 并推迟决定 - 您总是可以通过更改类路径在 slf4j 下插入不同的框架。

话虽如此,还有其他选项(例如 Log5j)可以利用最新的 Java 语言功能。我建议仔细看一下Logback(来自 Log4j 的主要程序员之一,slf4j 也是)。

【讨论】:

  • 在查看了 Logback 之后,我想我会将它用于不依赖任何库依赖于 log4j 的新项目,否则会使用 log4j。
【解决方案2】:

我从未使用过直接的 JDK 记录器,但对于一个新项目,我强烈推荐 Logback, 设计为 log4j 的继任者。你可以用它做一些非常好的事情:

  • printf 样式参数构建,不再有受 if logger.isDebugEnabled() 保护的混乱连接字符串。

if (log.isDebugEnabled())
 { 
    log.warn (i + "many ints,"+ l+"many longs");
}

log.debug("{} many ints, {} many longs", i, l);
  • 非常灵活的配置,包括将打印跟踪的配置。配置是 xml,但他们的网站包含一个实用程序,该实用程序将从您的 log4j 配置生成 xml 配置以帮助您入门。

缺点 - 无论如何,很多包都需要 log4j,因为它很常见,所以您的项目可能需要包含 2 个日志记录包。

【讨论】:

  • 现有的 log4j 依赖让我很想在这样的项目中坚持下去!
【解决方案3】:

对于一个新项目,我强烈推荐 slf4j 项目,它为多个记录器框架提供通用前端。

Steve B 描述的 {} 语法也存在于 slf4j(同一作者)中,因此无论后端如何,您都可以获得所有好处,并且仍然获得后端独立性。还有一个 log4j 桥可用,因此现有代码可以透明地使用 slf4j。真的很不错。

对于实际的后端,logback 很不错,但您可能已经投资了 log4j - 这很容易利用。

【讨论】:

    【解决方案4】:

    我会推荐JDK logging API。我已经使用了很多年,没有任何问题。它是 JDK 的一部分,因此不需要额外的 jar。 log4j 和 JDK 日志记录之间的区别很小,在我看来,不证明使用 log4j 是合理的。

    【讨论】:

      【解决方案5】:

      标准 API 与 log4j

      Java 开发人员提出的一个常见问题是:

      为什么我们应该在 Java 提供 API 时使用 log4j 日志框架 用于记录。 java API可以通过(java.util.logging)访问吗?

      Log4j 与标准日志 API 相比具有以下优势:

      • log4j 提供强大的日志记录
      • log4j 具有比标准日志 API 更多的可用功能
      • 配置和使用 log4j 更容易
      • log4j 还有一个更强大的格式化系统
      • 许多附加程序和处理程序可用于 log4j

      【讨论】:

      • 这个常见问题正是我目前正在思考的问题(以及我为什么在这里),但这个答案让我更加困惑。在这个答案中,“健壮”到底是什么意思,为什么 log4j 更健壮?说到“更多功能”,有没有亮点?再次谈到健壮性,什么是健壮的格式化系统?我承认我是登录 java 的“新手”,但对于大多数中小型应用程序来说,这些实现似乎远远超过了顶级。
      【解决方案6】:

      我在这个问题上挣扎了好几次;用jdk7和jdk8; java 日志记录超级快速和流畅,但我们只需要在配置时戴上程序员的帽子。

      要登录到多个文件目标,我们需要创建扩展 FielHandler 的 signare 类,并在属性文件中使用它们来配置,这种复杂性看起来很耗时,但一旦你获得了挂起,效率和可靠性都很棒。

      【讨论】:

        猜你喜欢
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        相关资源
        最近更新 更多