您认为 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 足够吗? [关闭] 的相关文章

  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何启用 vstest.console.exe 日志记录?

    我试图查看在 Visual Studio 2013 中运行测试时究竟执行了什么 vstest 命令 如何启用 vstest console exe 日志记录 执行的命令是带有相关参数的 VSTest Console exe 当您运行测试时
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐