简体   繁体   English

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

[英]Java Logger does not print anything to console

I'm just starting to learn about Logger in Java;我刚刚开始学习 Java 中的 Logger; however, I don't understand how it works.但是,我不明白它是如何工作的。

I have this code right after my class declaration:在我的类声明之后,我有这个代码:

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

Then in my methods I use it like this (examples):然后在我的方法中,我像这样使用它(示例):

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

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

But nothing prints to the console.但是没有任何内容打印到控制台。 Is it being saved in a file somewhere or am I just using it incorrectly?它是保存在某个文件中还是我只是使用不当?

I am using Eclipse Mars 2 with Java 1.6.0_22 if it makes a difference.如果它有所不同,我将使用带有 Java 1.6.0_22 的 Eclipse Mars 2。

EDIT : I am using the java.util.logging.Logger library.编辑:我正在使用java.util.logging.Logger库。

Here's what you should know, java.util.Logging is controlled by a root logger file found in the JRE/lib folder called logging.properties that defaults to Level.INFO, hence Fine messages are not displayed by default since FINE is lower than INFO,这是您应该知道的, java.util.Logging由 JRE/lib 文件夹中名为logging.properties的根记录器文件控制,该文件默认为 Level.INFO,因此默认情况下不显示精细消息,因为 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);

Now you can use your LOGGER object just fine and should work.现在您可以很好地使用您的 LOGGER 对象并且应该可以工作。 checkout Java Logging Overview结帐Java 日志记录概述

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

Remember that there's a reason the Log Level is set to FINE, so,lowering the level could also print unnecessary info from core libraries.请记住,日志级别设置为 FINE 是有原因的,因此,降低级别也可能会从核心库中打印出不必要的信息。 Let me know if it helps.如果有帮助,请告诉我。

Regards Douglas问候道格拉斯

My assumption is that you are using Log4J.我的假设是您使用的是 Log4J。 If that is correct, the logger should be saving to a file by default not printing to a console (which is usually done with System.out.println("message")).如果这是正确的,默认情况下记录器应该保存到一个文件而不是打印到控制台(通常使用 System.out.println("message") 完成)。 Do you have a log4j.properties file?你有 log4j.properties 文件吗?

This seems to work for me in a brand new Eclipse project.这在一个全新的 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();
    }
}

日食控制台

The nothing is displayed because there are no handlers attached to the Logger with name MyClass.class.getName();不显示任何内容是因为没有附加到名为 MyClass.class.getName(); 的记录器的处理程序;

But,there is one handler by default in the parent logger instance .This handler is ConsoleHandler that has log level INFO .但是,默认情况下,父记录器实例中有一个处理程序。此处理程序是具有日志级别INFO 的ConsoleHandler。

It's easy to verify:很容易验证:

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());
  }

}

Output:输出:

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

To display the log with ANY level, you could configure either PARENT_LOGGER handlers or LOGGER ones.要显示任何级别的日志,您可以配置 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"); 

Output:输出:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM