引言:
为什么去使用log4j 我已经在前面的学习笔记之一已经谈过了,基本的使用也已经去涉及到了。
而同样在apache下面的,还有一个commons-logging , 这里面又有什么玄机呢?下面就来说说两者的区别和联系。
一、log4j强大的日志处理 之上 commons-logging能为我们做什么?
Log4j的强大也可以从它的普及之广可以看出,多少程序员对它的推崇,而它的处理能力确实也深受爱戴。而在这里面commons-logging给我们带来的更是Log4j的封装。
1、commons-logging能把日志处理的log4j或其他的处理工具与项目进行解耦,解耦带来的好处,相信大家都知道,它便于我们更新技术,更改使用的方式。而不去涉及太多的改到。避免过度的紧密结合带来的许多问题
2、commons-logging可以自动的选择日志实现的系统,它甚至不需要配置
总结区别 :Log4j是一个强大的日志实现的系统,而commons-logging是一个十分便利的接口,对Log4j的优势的封装,使日志实现系统与项目做到解耦的效果。
ps: commons-logging 不仅仅对Log4j的封装,还有着其他的日志实现系统,包括它自身简单的日志实现系统
二、commons-logging 与 log4j 的结合使用
简单的实例应用:
- 找到commons-logging的jar包 commons-logging-1.1.1.jar 并导入
p.s:如果是maven工程的话,可直接在pom.xml中直接加入
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
- 这里面回顾下学习笔记之1 的那个例子,做一个小小的改动
//创建一个私有的日志对象
//private Logger log = Logger.getLogger(TestLog4j.class);
private static Log log = LogFactory.getLog(TestLog4j.class);
将原有的创建日志记录注释,改成上面的方式。
引用的类分别为
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
运行测试,显示正常。就这样引用commons-logging的方式就这样完成了。
这里面更可以注释掉
//加载配置文件
//PropertyConfigurator.configure("D:\\log4j.properties");
只要把
log4j.properties
这个配置文件放在classpath中(即项目目录下的bin文件夹中)
运行,成功显示。
三、commons-logging如何查找对应的日志实现系统
上面的例子中,说明了commons-logging与Log4j相结合的方式。但在这里commons-logging如何判断用Log4j来做日志实现的系统呢?
而这一点正是commons-logging的友好之处。commons-logging封装了Log4j,JDK,及自身拥有的SimpleLog;
这里的运行流程为:
1) 首先在 classpath 下寻找自己的配置文件 commons-logging.properties,如果找到,则使用其中定义的 Log 实现类;
2) 如果找不到 commons-logging.properties 文件,则在查找是否已定义系统环境变量有着org.apache.commons.logging.Log,找到则使用其定义的 Log 实现类;
3) 否则,查看 classpath 中是否有 Log4j 的包,如果发现,则自动使用 Log4j 作为日志实现类;
4) 否则,使用 JDK 自身的日志实现类(JDK1.4 以后才有日志实现类);
5) 否则,使用 commons-logging 自己提供的一个简单的日志实现类 SimpleLog;
(对官方文档的理解,具体与官方文档为准)
在这里,它的友好之处也就体现出来了。
1、可以不需要有配置文件,指的是commons-logging.properties
2、会自动查找最适合的日志实现方式,如Log4j,还是需log4j.properties的,不要和第一条混淆了。
3、在最坏的情况下,也有着自身的日志实现类SimpleLog来做日志处理。
END