轉載 http://feitianbenyue.iteye.com/blog/1882887

背景:

   一直以來,項目都是使用log4j+slf4j的方案來做日志, 最近看到 logback的文章,優點多多,手癢不已

:閱讀此文,需要有一定的log 日志基礎

 

logback介紹:

 首先logback,log4j,slf4j的作者是同一個人 ,java界鼎鼎大名的 Ceki Gülcü,logback為取代log4j而生,log4j基本停止維護

 

logback優點:

 

 

 

logback缺點:

  • 1.    編寫logback.xml 沒有提示
    由于logback的靈活性,沒有tld/schema規范文件,導致編寫沒有提示,

配置方法: 

1.  logbak+slf4j 項目中 java類里面的代碼的寫法和 log4j+slf4j的 代碼寫法完全一模一樣的

Java代碼  收藏代碼
  1. import org.slf4j.Logger;  
  2. import org.slf4j.LoggerFactory;  
  3.    
  4. /** 
  5.  *這個類提供了一些根據類的class文件位置來定位的方法。 
  6.  * 
  7.  * @author <a href="mailto:venusdrogon@163.com">金鑫</a> 
  8.  * @version 1.0 2011-4-27 上午12:40:08 
  9.  * @since 1.0 
  10.  */  
  11. public class ClassLoaderUtil{  
  12.    
  13.    private final static Logger log   = LoggerFactory.getLogger(ClassLoaderUtil.class);  

 

 

slf4j的切面日志功能功不可沒,代碼中可以忽略logback或者 log4j 的存在

 

2.   去掉 maven pom.xml 所有直接/間接的 log4j 依賴

比如

   

Xml代碼  收藏代碼
  1. <dependency>  
  2.      <groupId>loxia2</groupId>  
  3.      <artifactId>loxia2-support</artifactId>  
  4.      <version>${version.loxia}</version>  
  5.      <exclusions>  
  6.         <exclusion>  
  7.            <artifactId>slf4j-log4j12</artifactId>  
  8.            <groupId>org.slf4j</groupId>  
  9.         </exclusion>  
  10.         <exclusion>  
  11.            <artifactId>slf4j-api</artifactId>  
  12.            <groupId>org.slf4j</groupId>  
  13.         </exclusion>  
  14.      </exclusions>  
  15.    </dependency>  

 

 

 

3.   去掉 maven pom.xml 所有直接/間接的 slf4j-log4j12 依賴

如上面的 exclusion

4.  增加 logback 依賴

    

Xml代碼  收藏代碼
  1.   <!--******** logback and slf4j ******** -->  
  2. <dependency>  
  3.   <groupId>ch.qos.logback</groupId>  
  4.   <artifactId>logback-core</artifactId>  
  5.   <version>${version.logback}</version>  
  6. </dependency>  
  7. <dependency>  
  8.   <groupId>ch.qos.logback</groupId>  
  9.   <artifactId>logback-classic</artifactId>  
  10.   <version>${version.logback}</version>  
  11. </dependency>  
  12.   
  13. <dependency>  
  14.   <groupId>ch.qos.logback</groupId>  
  15.   <artifactId>logback-access</artifactId>  
  16.   <version>${version.logback}</version>  
  17. </dependency>  
  18.   
  19. <dependency>  
  20.   <groupId>org.slf4j</groupId>  
  21.   <artifactId>slf4j-api</artifactId>  
  22.   <version>${version.slf4j}</version>  
  23. </dependency>  
  24.   
  25. <!--jul橋接 用來輸出 Java Logging Framework (JUL) -->  
  26. <dependency>  
  27.   <groupId>org.slf4j</groupId>  
  28.   <artifactId>jul-to-slf4j</artifactId>  
  29.   <version>${version.slf4j}</version>  
  30. </dependency>  
  31.   
  32. <!-- jcl橋接,用來輸出 第三方Jakarta Commons Logging (JCL) -->  
  33. <dependency>  
  34.    <groupId>org.slf4j</groupId>  
  35.   <artifactId>jcl-over-slf4j</artifactId>  
  36.   <version>${version.slf4j}</version>  
  37. </dependency>  

 

 

 

 

5.   增加 logback.xml到 classpath


 

 

Xml代碼  收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <configuration>  
  3.    
  4.    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">  
  5.       <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
  6.         <level>DEBUG</level>  
  7.       </filter>  
  8.    
  9.       <!-- 注意 logback 的括號需要轉義 -->  
  10.       <encoder charset="UTF-8" class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">  
  11.         <pattern>%d{MMdd HH:mm:ss} %-5level \(%F:%L\) %method\(\) - %m%n  
  12.         </pattern>  
  13.       </encoder>  
  14.    </appender>  
  15.    <root>  
  16.       <appender-ref ref="CONSOLE" />  
  17.       <level value="DEBUG" />  
  18.    </root>  
  19. </configuration>  

 

 

配置完,啟動程序,可以看到 日志輸出和原先 log4j 基本上一樣

 

參考文章:

1.     Log4j遷移到LogBack的理由
http://www.oschina.net/translate/reasons-to-prefer-logbak-over-log4j

2.     日志組件logback的介紹及配置使用方法
http://www.cnblogs.com/yuanermen/archive/2012/02/13/2348942.html