Java 9强化了原有的日志API,这套日志API只是定义了记录消息的最小API,开发者可将这些日志消息路由到各种主流的日志框架(如SLF4J、Log4J等),否则默认使用Java传统的java.util.logging日志API。这套API使用:调用System类的getLogger(String name)方法获取System.Logger对象;调用System.Logger对象的log()方法输出日志。
为了与传统java.util.logging日志级别、主流日志框架的级别兼容,Java 9定义了如下所示的日志级别:
Java 9日志级别 | 传统日志级别 | 说明 |
---|---|---|
ALL | ALL | 最低级别,系统将会输出所有日志信息。因此将会生成非常多、非常冗余的日志信息 |
TRACE | FINER | 输出系统的各种跟踪信息,也会生成很多、很冗杂的日志信息 |
DEBUG | FINE | 输出系统的各种调试信息,会生成较多的日志信息 |
INFO | INFO | 输出系统内需要提示用户的提示信息,生成中等冗余的日志信息 |
WARNING | WARNING | 只输出系统内警告用户的警告信息,生成较少的日志信息 |
ERROR | SEVERE | 只输出系统发生错误的错误信息,生成很少的日志信息 |
OFF | OFF | 关闭日志输出 |
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class LoggerTest {
public static void main(String[] args) throws Exception {
// 获取System.Logger对象
System.Logger logger = System.getLogger("logtest");
// 设置系统日志级别
Logger.getLogger("logtest").setLevel(Level.FINE);
// 设置使用a.xml保存日志记录
Logger.getLogger("logtest").addHandler(new FileHandler("a.xml"));
logger.log(System.Logger.Level.DEBUG, "debug信息");
logger.log(System.Logger.Level.INFO, "info信息");
logger.log(System.Logger.Level.ERROR, "error信息");
}
}
日志级别,在开发阶段调试程序时,可能需要大量输出调式信息,在发布软件时,又希望关掉这些调试信息。此时就可通过日志来实现,只要将系统日志级别调高,所有低于该级别的日志信息就都会被自动关闭,如果将日志级别设为OFF,那么所有日志信息都会被关闭。
Java 9的日志API也支持国际化-System类除使用简单的getLogger(String name)方法获取System.Logger对象之外,还可以使用getLogger(String name, ResourceBundle bundle)方法来获取该对象,该方法需要传入一个国际化语言资源包,这样该Logger对象可根据key来输出国际化的日志信息。
// 加载国际化资源包
ResourceBundle rb = ResourceBundle.getBundle("logMess", Locale.getDefault(Locale.Category.FORMAT));
// 获取System.Logger对象
System.Logger logger = System.getLogger("logtest", rb);
// 设置系统日志级别
Logger.getLogger("logtest").setLevel(Level.INFO);
// 设置使用a.xml保存日志记录
Logger.getLogger("logtest").addHandler(new FileHandler("a.xml"));
logger.log(System.Logger.Level.DEBUG, "debug");
logger.log(System.Logger.Level.INFO, "info");
logger.log(System.Logger.Level.ERROR, "error");