commons-logging 与 log4j 的区别与联系引言:dependencygroupIdcommons-logging/groupIdartifactId
commons-logging 与 log4j 的区别与联系
引言:
<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来做日志处理。