【问题标题】:Difference in using java.util.logging and Log4j Loggers使用 java.util.logging 和 Log4j 记录器的区别
【发布时间】:2011-01-16 11:11:41
【问题描述】:

我正在开发一个必须使用日志记录机制的 Java 应用程序。现在我很困惑是选择 java 库记录器还是选择 Log4j 记录器。

所以我想知道什么时候可以使用 java logger 以及什么时候可以使用 log4j 记录器。

【问题讨论】:

    标签: java logging log4j java.util.logging


    【解决方案1】:

    Logger 类在早期并不是 jdk 的一部分,因此出现了几个库实现。 Log4j 库具有最全面的日志记录实用程序之一(格式化程序、附加程序等)。但是,对于大多数开发人员来说,这将是一种矫枉过正,简单的 java.util.Logger 就足够了。

    我个人在我的记录器实现上使用了一个自定义包装器。这使我能够定义自定义调用来执行功能日志记录/审计。

    【讨论】:

    • 即使是简单的任务,Log4j 也比 java.util.logging 更可取,这只是简单的讨厌
    • 可能不会!我记得我弟弟的一位朋友发送了他的作业,由于 log4j 依赖性而无法运行。问题出在类路径上,他的审阅者并没有给他留下那么深刻的印象。有些人只是不愿意学习。
    • 是的,谢天谢地,你兄弟的朋友的家庭作业并没有规定在 Java 中什么是好的实践,什么是不好的实践。
    • 我也不希望这样,我的意思是对外部 jar 文件的依赖会造成严重破坏并且可以避免。
    【解决方案2】:

    我建议您使用SLF4J,而不是将您的应用程序与特定的日志记录框架分离。它具有适用于各种流行日志框架的适配器,例如 Jakarta Logging、JDK1.4 日志、log4j 等。使其成为满足日志需求的良好抽象。

    【讨论】:

    【解决方案3】:

    我发现 Log4j 在调整日志配置时更加灵活,无需在生产环境中重新编译代码。

    【讨论】:

    • 是的,我总是选择/建议使用 log4j,而不是默认的 Java 日志记录。然后我发现了 commons-logging,它可以在启动时做出决定。这很棒,因为在生产标准中可能需要 Java(无论出于何种原因)。在开发过程中,您拥有 log4j 的灵活性/功能。但是现在我不再使用这两个包了!我现在建议使用的软件包是 SLF4J (slf4j.org) 和 BackLog (logback.qos.ch)。
    【解决方案4】:

    Apache Commoms Logging 项目和SLF4J,它们都抽象了底层的日志库。

    在实践中,我倾向于使用 Log4J 而不是内置的日志记录类。主要是因为 Log4J 可以在应用服务器中为每个 web-app 配置,而 JDK 日志记录是每个 JVM 配置。

    【讨论】:

    • Commons Logging 曾经有严重的类路径加载器问题。小心。
    • 仅在某些特定环境下;在大多数情况下都可以。
    • 确实可以将 SLF4J 视为 commons-logging 的改进版本。
    【解决方案5】:

    我目前推荐的方法是使用 SLF4J 作为日志 API。然后,您可以在发现它们时根据需要选择日志框架。

    我写了一篇关于我认为开始使用 SLF4J 的最佳实践和一个简单的“登录到 System.out”的文章,目前放置在。 http://runjva.appspot.com/logging101/index.html

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 2010-12-18
      • 2018-10-07
      • 2018-10-31
      • 2014-01-14
      • 1970-01-01
      • 2023-03-14
      • 2011-07-04
      • 2021-03-19
      相关资源
      最近更新 更多