java.util.logging.Logger日志级别显示为空

java.util.logging.Logger日志级别显示为空,java,logging,weblogic,java.util.logging,Java,Logging,Weblogic,Java.util.logging,在将Java EE应用程序从Weblogic/JDeveloper升级到12.1.2到12.1.3之后,我遇到了日志记录问题 System.out.println正在打印到服务器日志,但log.info(“测试”)没有打印。如果我设置日志级别,例如log.setLevel(level.INFO),日志记录就会工作。这是我的测试结果 // This works System.out.println("test1"); // Output when run: test1 // This does

在将Java EE应用程序从Weblogic/JDeveloper升级到12.1.2到12.1.3之后,我遇到了日志记录问题

System.out.println正在打印到服务器日志,但log.info(“测试”)没有打印。如果我设置日志级别,例如log.setLevel(level.INFO),日志记录就会工作。这是我的测试结果

// This works
System.out.println("test1");
// Output when run: test1

// This does not work. Nothing prints to the server log
log.info("test2");

// The above works if I set the log level
log.setLevel(Level.INFO);
log.info("test3");
// Output when run: test3

// This prints null. It appears that logging level is set to null on server startup
System.out.println(" what is my current logging level: " + log.getLevel());
根据Oracle文档,如果未提供日志记录配置,则使用JDK/JRE/Lib中的默认logging.properties。默认日志级别为INFO

我还尝试加载logging.properties并切换log4j,但没有任何效果

我不想在每个类中都设置日志级别。是否有办法在服务器启动或调试时将此设置为空,原因是/将日志记录级别设置为空。

来自:

结果可能为null,这意味着此记录器的有效级别将从其父级继承

因此,您只需设置根记录器的级别。您应该检查是否安装了,级别是否设置为INFO或更低。您还应该检查写入System.err是否显示在日志文件中,因为这是用于ConsoleHandler的流

我将此代码用于我的“Logg类”,因此每个类都与之连接,因此每个类的每个异常都使用此代码。如果你有很多类,你想从中获取日志,这是一种聪明而简单的方法。我也有一个问题,这段代码每次运行一个程序时都会创建一个txt文件,它与Logg类连接。我会很快修复它,所以我会编辑这个答案。这是我的密码:

一流的

private final static Logger logger = Logger.getLogger(Logg.class.getName());
private static FileHandler fh = null;
在方法上你可以做到这一点

Properties prop = new Properties();
InputStream in = Logg.class.getResourceAsStream("loggconfig");
if (in != null) {
    prop.load(in);
   } else {
   throw new FileNotFoundException("property file '" + in + "' not found in the classpath");
}
例如,此txt文件将命名为当前年份、日期和时间

Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm");
fh = new FileHandler((dateFormat.format(date) + ".log"), false);
Logger l = Logger.getLogger("");
fh.setFormatter(new SimpleFormatter());
l.addHandler(fh);
l.setLevel(Level.INFO);
在要记录的参数下设置此参数:

logger.log(Level.WARNING, "Bla bla");
您还可以有一个文件,比如配置文件,这样您就可以选择要记录的级别。然后需要创建一个属性文件,名为loggconfig

在配置文件中,我有以下代码:

Level=WARNING
因此,它只是我的每一个例外作为一个警告,我可以改变它的信息,以便我得到所有记录。Smart在代码中仅使用两个级别

因此,如果要使用配置文件,还需要更改l.setLevel,如下所示:

l.setLevel(Level.parse(prop.getProperty("Level")));

因此它采用配置文件中的级别。

您如何初始化日志?这似乎就是问题所在。另外,在您的管理控制台中,
server->logging选项卡
将日志级别设置为什么。检查高级部分。您也可以将
-Djava.util.logging.config.file=C:\mydomain\logging.properties
添加到startWebLogic脚本中。以下是管理控制台中的高级日志设置<代码>要记录的最低严重性:注意
日志文件:严重性级别:信息
标准输出:严重性级别:注意
我还尝试了-Djava.util.logging.config.file切换到startweblog脚本。它不起作用我假设logging.properties配置将负责加载根记录器和安装控制台处理程序。我还在oracle站点上读到一些内容,如果您不提供任何logging.properties,那么weblogic将从jdk/jre加载logging.properties。因此,我认为服务器应该从-Djava.util.logging.config.file传递的根记录器和consolehandler或jre中的根记录器和consolehandler中提取默认根记录器和consolehandler。是否安装了consolehandler,并且级别设置为INFO?System.err是否写入日志文件?System.err是否写入控制台/日志文件。已安装ConsoleHandler。这就是我在logging.properties
handlers=java.util.logging.ConsoleHandler.level=INFO
中看到的,我还尝试了以下方法
handlers=weblogic.logging.ServerLoggingHandler.weblogic.logging.ServerLoggingHandler.level=ALL.level=ALL.util.logging.ConsoleHandler.level=INFO weblogic.logging.ServerLoggingHandler.level=ALL
您能在运行时证明ConsoleHander和ServerLoggingHandler的级别/过滤器在使用什么吗?