commons-logging的使用

  • 簡介

commons-logging是Apache commons類庫中的一員。Apache commons類庫是一個通用的類庫,提供了基礎的功能,好比說commons-fileupload,commons-httpclient,commons-io,commons-codes等。
commons-logging可以選擇使用Log4j仍是JDK Logging,可是他不依賴Log4j,JDK Logging的API。若是項目的classpath中包含了log4j的類庫,就會使用log4j,不然就使用JDK Logging。使用commons-logging可以靈活的選擇使用那些日誌方式,並且不須要修改源代碼。

  • 使用commons-logging的一個例子

commons-logging的使用相似於Log4j,他們的級別以及使用規則是徹底同樣的。下面來一個demo:
首先咱們要在項目中添加commons-logging的maven依賴:
<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
測試代碼以下:
package org.linkinpark.commons.commonslogging;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;


/**
 * @建立做者: LinkinPark
 * @建立時間: 2016年2月26日
 * @功能描述: commons-logging的測試類
 */
public class CommonsLoggingTest
{
	public static Log LOG = LogFactory.getLog(CommonsLoggingTest.class);


	@Test
	public void test()
	{
		LOG.debug("debug()...");
		LOG.info("info()...");
		LOG.error("error()...");
	}


}

若是有Log4j,commons-logging會把輸出原封不動的交給log4j。若是沒有log4j,commons-logging會將相應的輸出轉化成JDK Logging的輸出。

1,如今咱們在項目中不要添加log4j的依賴,看下效果。

運行上面的測試,junit綠條,而後控制檯輸出以下:html

二月 26, 2016 10:34:23 上午 org.linkinpark.commons.commonslogging.CommonsLoggingTest test
信息: info()...
二月 26, 2016 10:34:23 上午 org.linkinpark.commons.commonslogging.CommonsLoggingTest test
嚴重: error()...
前面我也說過了,JDK自帶的Logging實際上是一個雞肋,居然沒有debug的日誌級別,差評。。。

2,如今咱們在項目中添加log4j的依賴,看下效果。

只要咱們在項目中添加了log4j的jar包,那麼commons-logging就會自動切到log4j的日誌輸出。因此如今咱們不提供log4j.properties配置文件,因此控制檯輸出以下:

log4j:WARN No appenders could be found for logger (org.linkinpark.commons.commonslogging.CommonsLoggingTest).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
如今咱們添加log4j.properties配置文件:

log4j.rootLogger=DEBUG,console

# 如下是rootLogger的配置,子類默認繼承,可是子類重寫下面配置=rootLogger+本身配置,我暈
#輸出到控制檯   
log4j.appender.console=org.apache.log4j.ConsoleAppender  
#設置輸出樣式   
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
#日誌輸出信息格式爲
log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n 

再次運行測試,junit綠條,而後控制檯正常輸出日誌:java

[2016-02-26 10:47:13]-[main-DEBUG]-[org.linkinpark.commons.commonslogging.CommonsLoggingTest-test(19)]: debug()...
 [2016-02-26 10:47:13]-[main- INFO]-[org.linkinpark.commons.commonslogging.CommonsLoggingTest-test(20)]: info()...
 [2016-02-26 10:47:13]-[main-ERROR]-[org.linkinpark.commons.commonslogging.CommonsLoggingTest-test(21)]: error()...
 


3,顯示配置commons-logging啓用log4j

默認的,common-logging會自動檢查是否使用log4j,也可使用配置文件顯示的啓用log4j。配置文件爲commons-logging.properties,放在程序的classpath下便可。
例如:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4J-Logger
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
關於上面的這種配置瞭解下就OK了,比較約定優於配置,commons-logging已經支持自動掃描了,咱們就不須要人爲的添加這些無聊的配置文件了。


  • 總結

嚴格的說,commons-logging不是一個日誌控件,沒有日誌功能,它只是統一了JDK Logging與Log4j的API,並把日誌功能交給JDK Loggings或者是log4j。對於不能肯定日誌方式的系統,commons-logging是一個不錯的選擇,Spring,Hibernate,Struts等使用的都是commons-logging。下一篇咱們會研究下Commons-logging的源碼,來深刻的整理下Commons-logging。
相關文章
相關標籤/搜索