【问题标题】:How to check info log level enabled in Java.util.logging如何检查 Java.util.logging 中启用的信息日志级别
【发布时间】:2016-06-03 10:44:30
【问题描述】:

在实际记录调试语句之前如何检查是否启用了某个日志级别?

【问题讨论】:

  • 提示:假设大多数Java“内置”组件已经存在“合理”功能是非常安全的 - 只是因为这些东西已经使用了多年,并且有时已经看到许多更新使其“尽可能完美”。所以,是的,在这里提问很好;但是首先阅读 javadoc,然后尝试 google ...通常比先写一个 SO 问题更有效...

标签: java logging java.util.logging


【解决方案1】:

是的,它提供 -

Logger#isLoggable(Level level)

检查给定级别的消息是否真的会被此记录 记录器。此检查基于 Loggers 有效级别,可能 从其父级继承。

documentation

【讨论】:

  • 可能有意义的唯一原因:性能优化。如果要记录的字符串的计算成本很高,那么也许您真的只想在该计算上花费 CPU 周期......如果确实需要结果。
  • 即使出于优化目的,Java 8 lambda 也不再需要。您可以按照this answer 中的说明简单地创建复杂的字符串。
【解决方案2】:

使用 Java 或 (SLF4J) 的简单日志记录外观 - http://www.slf4j.org/faq.html#logging_performance 可以完全避免检查日志记录级别。如果是参数化消息

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

在评估是否记录后,并且只有在决定是肯定的情况下,记录器实现才会格式化消息并将“{}”对替换为条目的字符串值。换句话说,这种形式在日志语句被禁用的情况下不会产生参数构造的成本。

以下两行将产生完全相同的输出。但是,在禁用日志记录语句的情况下,第二种形式的性能至少比第一种形式高 30 倍。

logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多