我刚开始学习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
库。
答案 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)
答案 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文件吗?