前言
commons-logging(JCL)是apache最早提供的日志的门面接口。提供简单的日志实现以及日志解耦功能。
目前JCL已经停止维护了,其最新版本是1.2
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
一、运行时决定使用哪种日志架构
他是apache公司开发的一个抽象日志通用框架,本身不实现日志记录,但是提供了记录日志的抽象方法即接口(info,debug,error…),底层通过一个数组存放具体的日志框架的类名,然后循环数组依次去匹配这些类名是否在app中被依赖了,如果找到被依赖的则直接使用,所以他有先后顺序
//下面是jcl中存放日志技术类名的数组,默认有四个,后面两个可以忽略
private static final String[] classesToDiscover = {
"org.apache.commons.logging.impl.Log4JLogger",
"org.apache.commons.logging.impl.Jdk14Logger",
"org.apache.commons.logging.impl.Jdk13LumberjackLogger",
"org.apache.commons.logging.impl.SimpleLog"
};
for(int i=0; i<classesToDiscover.length && result == null; ++i) {
//创建Log对象
//可以看到这里的循环条件必须满足result不为空,也就是如果没有找到具体的日志依赖则继续循环,如果找到则条件不成立,不进行循环了
result = createLogFromClass(classesToDiscover[i], logCategory, true);
}
总结:顺序log4j>jul
二、日志级别
fatal
:非常严重的错误,导致系统中止。期望这类信息能立即显示在状态控制台上。
error
:其它运行期错误或不是预期的条件。期望这类信息能立即显示在状态控制台上。
warn
:使用了不赞成使用的API、非常拙劣使用API, ‘几乎就是’错误, 其它运行时不合需要和不合预期的状态但还没必要称为 “错误”。期望这类信息能立即显示在状态控制台上。
info
:运行时产生的有意义的事件。期望这类信息能立即显示在状态控制台上。
debug
:系统流程中的细节信息。期望这类信息仅被写入log文件中。
trace
:更加细节的信息。期望这类信息仅被写入log文件中。
通常情况下,我们希望将info级别以上的日志信息输出到控制台,而debug级别以上的信息写入到log文件中,而error信息写入到一个单独的文件中去,下面我们的实例将会实现这样的功能。