您认为 java.util.logging 足够吗? [关闭]

2024-02-28

根据标题,您认为默认的 Java 日志框架足以满足您的需求吗?

您是否使用替代日志记录服务,例如log4j http://logging.apache.org/log4j/或者其他?如果是这样,为什么? 我想听听您对不同类型项目中的日志记录要求以及何时集成框架实际上是必要和/或有用的建议。


java.util.logging (jul) 从一开始就是不必要的。忽略它即可。

jul 本身有以下缺点:

  • 当 Java 1.4 中引入 jul 时,已经有一个广泛使用的完善的日志框架:LOG4J
  • 预定义的日志级别为:SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST。我不会告诉你我个人对这些预定义级别的看法,以保持这个答案的半客观性。
  • 可以定义附加级别。 jul 支持高达 4G 的不同日志级别,恕我直言,这有点过分了。有时少即是多。
  • 最重要的一点:如果您敢于定义自己的日志级别,您可能会遇到内存泄漏问题!
    请随意在这里阅读有关此效果的信息:

    • 类加载器泄漏:可怕的“java.lang.OutOfMemoryError:PermGen space”异常 http://blogs.oracle.com/fkieviet/entry/classloader_leaks_the_dreaded_java
    • 如何修复可怕的“java.lang.OutOfMemoryError:PermGen space”异常(类加载器泄漏) http://blogs.oracle.com/fkieviet/entry/how_to_fix_the_dreaded

    即使您不打算使用自定义级别,这也是一本非常有趣的读物,顺便说一句,因为这个问题是一个广泛存在的问题,根本不仅仅适用于 jul。

  • 它驻留在 java.* 命名空间中,因此无法在运行时交换实现。这有效地防止了将其桥接到 SLF4J,就像在 commons.logging 和 LOG4J 中一样。 jul 的桥接方式会对性能产生影响。这使得 jul 成为最不灵活的日志框架。
  • 通过引入 jul,Sun 隐含地将其定义为“标准 java 日志框架”。这导致了一种常见的误解,即“优秀的 Java 公民”应该在其库或应用程序中使用 jul。
    情况恰恰相反。
    如果您使用 commons.logging 或 LOG4j,您将能够在需要时通过桥接到 SLF4J 来交换实际使用的日志记录框架。这意味着使用 commons.logging、LOG4J 或 SLF4J 的库都可以记录到相同的日志目标,例如文件。

我个人建议使用SLF4J http://slf4j.org/+Logback http://logback.qos.ch/用于所有日志记录目的的组合。这两个项目均由 LOG4J 背后的人 Ceki Gülcü 协调。
SLF4J 是 commons.logging 的一个有价值的(但非官方的,因为它不是来自同一组)继承者。它比 CL 问题更少,因为它静态解析实际使用的日志记录后端。此外,它还有比 CL 更丰富的 API。
另一方面,Logback 是 LOG4J 的(非)官方继承者。它原生实现 SLF4J,因此不会有任何包装器造成的开销。

Now如果您仍然认为我应得的,您可以对我投反对票。 ;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您认为 java.util.logging 足够吗? [关闭] 的相关文章

随机推荐