java.util.logging.Logger是JDK自带的日志工具,其简单实现了日志的功能,不是很完善,所以在实际应用中使用的比较少。本文直接用代码演示其使用方法,文中所使用到的软件版本:Java 1.8.0_191。
1、简单使用
packagecom.inspur.demo.log;importjava.util.logging.FileHandler;importjava.util.logging.Formatter;importjava.util.logging.Level;importjava.util.logging.LogRecord;importjava.util.logging.Logger;public classJULCase {public static voidmain(String[] args) {try{
Logger logger= Logger.getLogger(JULCase.class.getName());//日志保存到文件
FileHandler fileHandler = new FileHandler("d:/temp/a.log", true);
fileHandler.setLevel(Level.INFO);//设置日志格式
fileHandler.setFormatter(newFormatter() {
@OverridepublicString format(LogRecord record) {return record.getLevel() + ":" + record.getMessage() + "\n";
}
});
logger.addHandler(fileHandler);
logger.info("aaaa");
logger.warning("bbbb");
}catch(Exception e) {
e.printStackTrace();
}
}
}
日志消息被转发到已注册的Handler对象;在默认情况下,日志消息会往上递归发送到父Logger的Handler;由于默认的最上面的父Logger设置了ConsoleHandler,所以不需要再添加ConsoleHandler了。
该日志工具对应的配置文件为$JAVA_HOME/jre/lib/logging.properties,部分内容如下:
# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit= 50000java.util.logging.FileHandler.count= 1java.util.logging.FileHandler.formatter=java.util.logging.XMLFormatter
# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level=INFO
java.util.logging.ConsoleHandler.formatter= java.util.logging.SimpleFormatter
可以看到ConsoleHandler默认的级别为INFO。
2、与SLF4J结合使用
2.1、jul转为SLF4j
把jul的日志转换为slf4j输出。
a、引入jul-to-slf4j的jar包
org.slf4j
jul-to-slf4j
1.7.30
b、在记录日志前加入如下代码
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
完整代码如下:
packagecom.inspur.demo.log;importorg.slf4j.bridge.SLF4JBridgeHandler;importjava.util.logging.Logger;public classJULCase {public static voidmain(String[] args) {try{
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
Logger logger= Logger.getLogger(JULCase.class.getName());
System.out.println(logger.getParent().getHandlers()[0]);
logger.info("aaaa");
logger.warning("bbbb");
}catch(Exception e) {
e.printStackTrace();
}
}
}
2.2、SLF4j绑定jul
slf4j使用jul来输出日志;引入slf4j-jdk14的jar包即可。
org.slf4j
slf4j-jdk14
1.7.30
注:jul-to-slf4j和slf4j-jdk14不能同时使用,否则会导致日志事件在SLF4J和jul之间死循环。