对于java的日志工具,以前一直只用过log4j,只听说过commons-logging。这两天在研究周导写的代码,发现工程中不仅用了log4j,还用上了commons-logging。觉得很奇怪,一个工程干嘛要用两个日志工具?
原来,Apache为了让众多的日志工具有一个相同操作方式,还实现做了一个通用日志工具包commons-logging。commons-logging是为那些需要建立在不同环境下使用不同日志架构的组件或库的开发者创建的,其中包括 Apache Log4j以及Java log的日志架构。commons-logging在运行时会自行决定使用哪种日志架构,如果发现classpath中是否有Log4j的包,则自动使用Log4j作为日志实现类,如果其他的日志工具一个也没有,则使用commons-logging自己提供的一个简单的日志实现类SimpleLog。
写了个小小的测试代码,发现commos-logging真的很强大。
[java]package com.ooobj.log;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class LogTest {
private static Log log = LogFactory.getLog(LogTest.class);
public void test() {
log.debug("111");
log.info("222");
log.warn("333");
log.error("444");
log.fatal("555");
}
public static void main(String[] args) {
LogTest logTest = new LogTest();
logTest.test();
}
}[/java]
classpath中无log4j包的输出:
2010-4-8 14:12:37 com.ooobj.log.LogTest test
信息: 222
2010-4-8 14:12:37 com.ooobj.log.LogTest test
警告: 333
2010-4-8 14:12:37 com.ooobj.log.LogTest test
严重: 444
2010-4-8 14:12:37 com.ooobj.log.LogTest test
严重: 555
classpath中放入log4j包的输出:
[main] DEBUG com.ooobj.log.LogTest – 111
[main] INFO com.ooobj.log.LogTest – 222
[main] WARN com.ooobj.log.LogTest – 333
[main] ERROR com.ooobj.log.LogTest – 444
[main] FATAL com.ooobj.log.LogTest – 555
log4j.properties文件:
[java]#设置级别和多个目的地
log4j.rootLogger=debug,appender1,appender2
#输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#设置输出样式
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
#输出到文件(这里默认为追加方式)
log4j.appender.appender2=org.apache.log4j.FileAppender
#设置文件输出路径
#【1】文本文件
#log4j.appender.appender2.File=D:/workspace3.3/test/Log4JDemo02.log
#【2】HTML文件
log4j.appender.appender2.File=D:/workspace3.3/test/Log4JDemo02.html
#设置文件输出样式
#log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout[/java]
没看出比log4j强的地方啊, 这几个功能Log4j也有的
Comment by 阿单 — 2010/04/08 @ 21:46
@阿单, 惊现阿单!
commons-logging只是一个通用接口,它自身的日志功能很弱。但是如果只用log4j的话会造成项目中强耦合log4j,哪天你不想用log4j了就会很麻烦,要更改代码
Comment by ooaixt — 2010/04/09 @ 08:52