当级别严重时,Java 日志记录不执行信息

标签 java logging

我正在使用 java.util.logging

我有一个 foo 函数:

public String foo() {
    System.out.println("syso ==> foo");
    return "foo";
}

当我更改日志级别时,我不希望 foo 被执行!

Logger logger = Logger.getLogger(MyClass.class.getSimpleName());
FileHandler fileHandler = new FileHandler("myapp.log");
logger.addHandler(fileHandler);
logger.setLevel(Level.SEVERE);
logger.info("Write foo: " + foo() );
logger.severe("Test severe");

我知道 logger.info() 不会打印在日志文件中,但为什么要执行 foo()? 我该如何解决?

谢谢

最佳答案

虽然它不显示该文本,但该行确实被执行了,因为该行不是注释。

如果使用 Apache Logger,则尝试以这种方式使用 Logger.isInfoEnabled() 方法:-

if(logger.isInfoEnabled()){
    logger.info("Write foo: " + foo() );
}

否则,如果它是 jdk 记录器,则按照 @n1ckolas 的建议使用以下方法

if (logger.isLoggable(Level.INFO)) {
    logger.info("Write foo: " + foo() );
}

关于当级别严重时,Java 日志记录不执行信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15109223/

相关文章:

java - Android 动态微调器更新

android - 定制的android dumpsys meminfo

logging - 如何同时使用 log4 和 logback?

java - 需要向框架添加按钮。这段java代码有什么问题?

java joda-time 获取日期时间

java - 在 Android 开发中何时使用 Bitmap 与 Byte[]?

java - 在java中以goto的形式使用break

node.js - 保留在heroku上运行的nodejs应用程序的历史堆栈跟踪

java - 应该将 Log4J 记录器声明为 transient 吗?

java - 配置Log4J每天写入新文件新日志文件