1.什么是Log4j?
Log4j为操作日志
2.什么是commons-logging?
参考:http://www.blogjava.net/jxhkwhy/archive/2007/07/20/131501.html
commons-logging使得项目与Log4j解耦,这是因为:commons-logging会自主的选择相较合适的日志记录操作日志,具体为:
/*
* 使用commons-logging + log4j,使得项目与日志Log4j去耦合,自动获取最合适的日志记录方法
* 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;
*
*
* *
3.从代码上看
a.Log4j代码
static Logger logger = Logger.getLogger(Log4jExternalXml.class);
public static void main(String[] args){
//DOMConfigurator.configure("src/plainlog4jconfig.xml");//获取xml
//Logger logger = Logger.getRootLogger();
PropertyConfigurator.configure("src/log4j.properties");//获取Log4j配置文件properties
Logger logger = Logger.getLogger("console");
logger.debug("Here is some DEBUGaaaaaaaaaaa");
logger.info("Here is some INFOaaaaaaaaa");
logger.warn("Here is some WARNaaaaaaaaaaa");
logger.error("Here is some ERRORaaaaaaaa");
logger.fatal("Here is some FATALaaaaaaaaa");
b.commons-logging + log4j代码
<pre name="code" class="java">static Log log = LogFactory.getLog(Log4jExternalXmlPlusCommonsLogging.class);//使用commons-logging无须去获取配置文件,会找到最优的输出日志方法
public static void main(String[] args){
log.debug("this is debug");
log.info("this is info");
log.warn("this is warn");
log.error("this is error");
log.fatal("this is fatal");
}
从a,b比较,b没有写获取Log4j配置文件行代码,commons-logging会自动去读取log4j.properties