java.util.logging.Logger日志级别为null

时间:2015-01-21 15:31:25

标签: java logging weblogic java.util.logging

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

System.out.println正在打印到服务器日志,但log.info(“test”)不是。如果我设置日志级别,则日志记录有效,例如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的原因。

2 个答案:

答案 0 :(得分:0)

来自logger documentation

  

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

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

答案 1 :(得分:0)

我将此代码用于我的" 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

因此它只是我作为警告的每个例外,我可以将其更改为INFO,以便我记录所有内容。智能只在代码中使用两个级别。

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

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

所以从配置文件中获取级别。