我遇到了一个让我感到困惑的问题。我想尝试使用JUL日志记录(JDK日志记录)进行一些操作。我从以下简单程序开始:
package biz.ple;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class Application {
public static void main(String[] args)
{
Logger logA = LogManager.getLogManager().getLogger("LoggerA");
Logger logB = LogManager.getLogManager().getLogger("LoggerB");
if (logA == null) {
System.out.println("LoggerA is null!");
}
if (logB == null) {
System.out.println("LoggerB is null!");
}
String normalMsg = "Message without cookie prefix.";
String cookieMsg = "[Cookie] Message with a cookie prefix.";
logA.info(normalMsg);
logA.info(cookieMsg);
logB.info(normalMsg);
logB.info(cookieMsg);
}
}
令人惊讶的是,记录器logA和logB始终为null。我在文档中读到,该应用程序没有任何强引用的记录器随时都可以被GC,但是在我看来,变量logA和logB确实是强引用,不是吗?
我真的不明白这一点,将不胜感激。
最佳答案
我的理解是,这只会获得现有的记录器,而不会创建该名称的新记录器。要创建新的记录器,您需要使用静态Logger.getLogger("myLogger");
命令
public static void main(String[] args){
Logger log=Logger.getLogger("myLogger");
Logger logA = LogManager.getLogManager().getLogger("myLogger"); //exists
Logger logB = LogManager.getLogManager().getLogger("nonExistantLogger"); //is null
}
Logger.getLogger(“myLogger”)javadoc:
LogManager.getLogManager()。getLogger(“myLogger”)javadoc