Java Logger不会将任何内容打印到控制台
我刚刚开始学习Java中的Logger;然而,我不明白它是如何工作的 在我的类声明之后,我有以下代码:Java Logger不会将任何内容打印到控制台,java,logging,Java,Logging,我刚刚开始学习Java中的Logger;然而,我不明白它是如何工作的 在我的类声明之后,我有以下代码: private static final Logger LOGGER = Logger.getLogger(MyClass.class.getName()); 然后在我的方法中,我像这样使用它(示例): 但控制台上没有打印任何内容。它是保存在某个文件中还是我只是使用不正确 我正在使用EclipseMars2和Java1.6.0ã22,如果它有区别的话 EDIT:我正在使用java.util.
private static final Logger LOGGER = Logger.getLogger(MyClass.class.getName());
然后在我的方法中,我像这样使用它(示例):
但控制台上没有打印任何内容。它是保存在某个文件中还是我只是使用不正确
我正在使用EclipseMars2和Java1.6.0ã22,如果它有区别的话
EDIT:我正在使用
java.util.logging.Logger
库。我的假设是您正在使用Log4J。如果这是正确的,那么记录器在默认情况下应该保存到一个文件,而不是打印到控制台(这通常是通过System.out.println(“消息”)完成的)。您有log4j.properties文件吗?在一个全新的Eclipse项目中,这似乎对我很有用
import java.util.logging.Logger;
public class Foobar {
public static final Logger LOGGER = Logger.getLogger(Foobar.class.getName());;
public Foobar() {
LOGGER.info("Constructed");
}
public static void main(String[] args) {
new Foobar();
}
}
您应该知道,
java.util.Logging
由JRE/lib文件夹中名为Logging.properties
的根记录器文件控制,该文件默认为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对象了,应该可以正常工作了。结帐
请记住,将日志级别设置为“精细”是有原因的,因此,降低日志级别还可能打印核心库中不必要的信息。如果有帮助,请告诉我
关于Douglas,将不显示任何内容,因为没有名为MyClass.class.getName()的处理程序连接到记录器 但是,父记录器实例中默认有一个处理程序。此处理程序是具有日志级别信息的ConsoleHandler 很容易验证:
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
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
要以任何级别显示日志,可以配置父日志记录器处理程序或日志记录器处理程序
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: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
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
将库添加到OP中。您是否尝试在Eclipse中刷新projectexplorer以查看是否生成了任何文件;甚至关闭Eclipse并重新打开。没有新文件。是否尝试调用LOGGER.getHandlers()并检查分配给记录器的处理程序列表?可能未分配控制台处理程序?不,而是检入调试器处理程序实例的类。您还可以通过调用LOGGER.addHandler(new ConsoleHandler())尝试添加处理程序。尝试使用LOGGER.setLevel(Level.ALL),可能日志记录已关闭。我没有使用Log4J。在编辑中将库添加到OP中。对不起,我的课也是这样写的。谢谢你的帮助,我必须为它添加处理程序才能工作。谢谢!这真的很有帮助!我将从概述中查看更多内容。