一、JUL学习总结
(1)总结
JDK自带的日志系统中已经为我们创建了一个顶层的RootLogger,可以针对这个顶层的RootLogger设置多个Handler(如ConsoleHandler, FileHandler等),如果想在控制台输出debug级别以上的日志,在文件中输出info级别以上的日志,那就针对各个Handler设置不同的日志级别(当然也可以设置不同的格式化器Formatter)
(2)配置文件
说明:JDK自带的日志配置文件在 $JAVA_HOME\jre\lib\logging.properties ,可以把这个默认的日志文件拷贝出来,修改后放到自己的项目中,然后在项目中读取自定义的配置文件信息。
#RootLogger使用的处理器,在获取RootLogger对象时进行的设置
#默认的情况下,下述配置的是控制台的处理器,只能往控制台上进行输出操作
#如果想要添加其他的处理器,在当前处理器类后面通过以逗号的形式进行分隔,可以添加多个处理器
handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler
#RootLogger的日志级别
#默认的情况下,这是全局的日志级别,如果不手动配置其他的日志级别
#则默认输出下述配置的级别以及更高的级别
# JDK自带的日志级别有:SERVER WARNING INFO CONFIG FINE FINER FINEST (ALL OFF)
.level= ALL
# 输出日志文件的路径
# %h:用户目录
# %u:序号,从0开始
#java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.pattern = D:/a_myFile/workspace/personal/Java/log/logs/java%u.log
#输出日志文件的限制(50000字节)
java.util.logging.FileHandler.limit = 50000
#设置日志文件的数量
java.util.logging.FileHandler.count = 1
#输出日志的格式,默认是以XML的方式进行的输出
#java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
# 记录到文件的日志级别为INFO及以上级别
java.util.logging.FileHandler.level = INFO
# 追加日志
java.util.logging.FileHandler.append = true
# ConsoleHandler设置
# 记录到控制台的日志级别为CONFIG及以上级别
java.util.logging.ConsoleHandler.level = CONFIG
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
(3)在代码中读取自定义的配置文件
说明:此处使用使用Maven创建项目,配置文件存放在resources目录下
package factory;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class LogFactory {
public static Logger getMyLogger(String name) {
ClassLoader classLoader = LogFactory.class.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("logging.properties");
LogManager logManager = LogManager.getLogManager();
try {
logManager.readConfiguration(inputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
return Logger.getLogger(name);
}
}
(4)在代码中记录日志
package jul;
import factory.LogFactory;
import jul.p1.Test1;
import jul.p2.Test2;
import java.util.logging.Logger;
public class JULTest1 {
public static final Logger logger = LogFactory.getMyLogger("jul.JULTest1");
public static void main(String[] args) {
test1();
}
public static void test1(){
logger.severe("severe");
logger.warning("waring");
logger.info("info");
logger.config("config");
logger.fine("fine");
logger.finer("finer");
logger.finest("finest");
}
}
(4)日志记录结果
(4.1)控制台输出如下
(4.2)文件中的输入如下