Java Logger不会向控制台打印任何内容

时间:2016-06-08 21:26:31

标签: java logging

我刚开始学习Java中的Logger;但是,我不明白它是如何运作的。

我的课程声明后就有了这段代码:

private static final Logger LOGGER = Logger.getLogger(MyClass.class.getName());

然后在我的方法中我使用它(例子):

LOGGER.log(Level.FINE, "Testing");
LOGGER.info("More testing...");

...
} catch(Exception e) {
    LOGGER.log(Level.SEVERE, e.toString(), e);
}

但没有任何内容打印到控制台。它是保存在某个文件中还是我只是错误地使用它?

如果它有所作为,我正在使用Eclipse Mars 2和Java 1.6.0_22。

编辑:我正在使用java.util.logging.Logger库。

4 个答案:

答案 0 :(得分:11)

以下是您应该知道的内容,java.util.Logging由名为logging.properties的JRE / lib文件夹中的根记录器文件控制,默认为Level.INFO,因此默认情况下不会显示Fine消息FINE低于INFO,

 private static final Logger LOGGER = Logger.getLogger(MyClass.class.getName());

 Handler handlerObj = new ConsoleHandler();
 handlerObj.setLevel(Level.ALL);
 LOGGER.addHandler(handlerObj);
 LOGGER.setLevel(Level.ALL);
 LOGGER.setUseParentHandlers(false);

现在你可以正常使用你的LOGGER对象了,应该可以使用。结帐Java Logging Overview

 LOGGER.log(Level.FINEST, "finest");

请记住,将日志级别设置为FINE是有原因的,因此,降低级别还可以从核心库中打印不必要的信息。如果有帮助,请告诉我。

关心道格拉斯

答案 1 :(得分:2)

在一个全新的Eclipse项目中,这似乎对我有用。

this.browserLog = this.browserLog.concat(browser.log('browser').value);

eclipse console

答案 2 :(得分:0)

什么都不显示,因为没有名称为MyClass.class.getName();的Logger附加处理程序。

但是,默认情况下,父记录器实例中有一个处理程序。该处理程序是ConsoleHandler,其日志级别为 INFO

很容易验证:

public class StackAnswerAboutLogger {

private static final Logger LOGGER = Logger.getLogger(StackAnswerAboutLogger.class.getName());
private static final Logger PARENT_LOGGER = Logger.getLogger("");

public static void main(String[] args) {
    LOGGER.info("Count of LOGGER handlers: " + Integer.toString(LOGGER.getHandlers().length));
    LOGGER.info("Count of PARENT_LOGGER handlers: " + Integer.toString(LOGGER.getHandlers().length));
    Handler defaultConsoleHandler = PARENT_LOGGER.getHandlers()[0];
    LOGGER.info("Default Console Handler Log Level: " + defaultConsoleHandler.getLevel().toString());
  }

}

输出:

Jan 10, 2020 10:23:53 PM init.StackAnswerAboutLogger main
INFO: Count of LOGGER handlers: 0
Jan 10, 2020 10:23:54 PM init.StackAnswerAboutLogger main
INFO: Count of PARENT_LOGGER handlers: 0
Jan 10, 2020 10:23:54 PM init.StackAnswerAboutLogger main
INFO: Default Console Handler Log Level: INFO

要以ANY级别显示日志,可以配置PARENT_LOGGER处理程序或LOGGER处理程序。

Handler defaultConsoleHandler = PARENT_LOGGER.getHandlers()[0];
LOGGER.info("Default log level of PARENT_LOGGER: " +PARENT_LOGGER.getLevel().toString());
LOGGER.info("Default Console Handler Log Level: "+defaultConsoleHandler.getLevel().toString());
defaultConsoleHandler.setLevel(Level.ALL);
PARENT_LOGGER.setLevel(Level.ALL);
LOGGER.log(Level.FINEST, "here is finest log");
LOGGER.log(Level.SEVERE, "here is severe log"); 

输出:

Jan 10, 2020 10:38:10 PM init.StackAnswerAboutLogger main
INFO: Default log level of PARENT_LOGGER: INFO
Jan 10, 2020 10:38:10 PM init.StackAnswerAboutLogger main
INFO: Default Console Handler Log Level: INFO
Jan 10, 2020 10:38:10 PM init.StackAnswerAboutLogger main
FINEST: here is finest log
Jan 10, 2020 10:38:10 PM init.StackAnswerAboutLogger main
SEVERE: here is severe log

答案 3 :(得分:-1)

我的假设是你正在使用Log4J。如果这是正确的,则记录器应该保存到文件,默认情况下不打印到控制台(通常使用System.out.println(“message”)完成)。你有一个log4j.properties文件吗?