将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的原因。
答案 0 :(得分:0)
结果可能为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")));
所以从配置文件中获取级别。