log4j迁移到logback

本帖最后由 陈明河 于 2014-8-19 15:20 编辑

考虑到logback日志组件性能比log4j好,所以项目开发过程中抛弃log4j改用logback
log4j迁移到logback的步骤(只要三步):
第一  引入logback需要的jar包


  1.                
  2.                         ch.qos.logback
  3.                         logback-core
  4.                         1.1.2
  5.                
  6.                
  7.                         ch.qos.logback
  8.                         logback-access
  9.                         1.1.2
  10.                
  11.                
  12.                         ch.qos.logback
  13.                         logback-classic
  14.                         1.1.2
  15.                
  16.                
  17.                         org.slf4j
  18.                         log4j-over-slf4j
  19.                         1.7.7
  20.                
  21.                
复制代码

第二  删除src下的log4j.properties文件,在src下创建logback.xml配置文件

项目之前的使用log4j.properties可以用http://logback.qos.ch/translator/转换到等价的logback配置文件。PS:转换后的配置文件,pattern参数需要修改。
如log4j的pattern配置 %-d{yyyy-MM-dd HH:mm:ss,SSS} [%c:%L]-[%p] %m%n 在logback里面不在起效。
我把它调整为 %date [%level] [%thread] %logger{80} [%file : %line] %msg%n
另外按日期产生日志文件策略的pattern也需要修改(具体查看下文的logback.xml配置文件)。
具体含义是:

  参数                         含义  
  %date 表示日期格式(yyyy-MM-dd HH:mm:ss,SSS)
  %level 表示日志的级别
  %thread 表示输出产生该日志的线程名
  %logger{80}   表示logger名字最长80个字符,否则按照句点(.)分割
  %file 表示文件名
  %line 表示第几行
  %msg 表示输出信息
  %n 表示换行

下面粘贴出项目在替换logback之前的log4j配置文件:
  1. ### direct log messages to stdout
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.Target=System.out
  4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  5. log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} %m    [%c:%L]-[%p] %n

  6. ### log messages to file
  7. log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
  8. log4j.appender.R.File=../logs/vod.log
  9. log4j.appender.R.DatePattern='.'yyyy-MM-dd
  10. log4j.appender.R.layout=org.apache.log4j.PatternLayout
  11. log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c:%L]-[%p] %m%n

  12. log4j.appender.DC=org.apache.log4j.DailyRollingFileAppender
  13. log4j.appender.DC.File=../logs/devicecontrol.log
  14. log4j.appender.DC.DatePattern='.'yyyy-MM-dd
  15. log4j.appender.DC.layout=org.apache.log4j.PatternLayout
  16. log4j.appender.DC.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c:%L]-[%p]-[%t] %m%n


  17. ### Application log config
  18. log4j.rootLogger=info,stdout,R

  19. ### set log levels
  20. log4j.logger.org.springframework=error
  21. log4j.logger.org.quartz.simpl=error
  22. log4j.logger.org.hibernate=error
  23. log4j.logger.org.apache=error

  24. log4j.logger.com.thunisoft.summer=warn
  25. log4j.logger.com.thunisoft.test=error
  26. log4j.logger.com.thunisoft.artery=error
  27. log4j.logger.com.thunisoft.crs=error
  28. log4j.logger.com.thunisoft.cas.service.devicecontrol=debug,DC

  29. log4j.logger.jdbc.sqlonly=INFO
  30. log4j.logger.jdbc.sqltiming=DEBUG
  31. log4j.logger.jdbc.audit=OFF
  32. log4j.logger.jdbc.resultset=OFF
  33. log4j.logger.jdbc.connection=OFF
复制代码
下面粘贴出项目使用的logback.xml


  1.   
  2.     ../logs/devicecontrol.log
  3.    
  4.       %date [%level] [%thread] %logger{80} [%file : %line] %msg%n
  5.    
  6.    
  7.       ../logs/devicecontrol.log.%d{yyyy-MM-dd}
  8.    
  9.   
  10.   
  11.     System.out
  12.    
  13.       %date [%level] [%thread] %logger{80} [%file : %line] %msg%n
  14.    
  15.   
  16.   
  17.     ../logs/vod.log
  18.    
  19.       %date [%level] [%thread] %logger{80} [%file : %line] %msg%n
  20.    
  21.    
  22.     ../logs/vod.log.%d{yyyy-MM-dd}
  23.    
  24.   
  25.   
  26.   
  27.   
  28.   
  29.   
  30.    
  31.   
  32.   
  33.   
  34.   
  35.   
  36.   
  37.   
  38.   
  39.   
  40.   
  41.   
  42.    
  43.    
  44.   
复制代码
第三  把打印日志类使用的logger类替换为SLF4J的logger类

如果软件只调用了
log4j的客户端API 
或Jakarta Commons Logging (JCL) API
或java.util.logging API
就能用SLF4J迁移工具(http://www.slf4j.org/migrator.html)自动迁移到SLF4J。


下面是slf4j官网迁移log4j代码的示例:
MyClass is a sample class using JCL. Here it is before:
  1. package some.package;
  2.       
  3. import org.apache.commons.logging.Log;
  4. import org.apache.commons.logging.LogFactory;
  5.       
  6. public MyClass {    
  7.             
  8.   Log logger = LogFactory.getLog(MyClass.class);
  9.       
  10.   public void someMethod() { 
  11.     logger.info("Hello world");
  12.   }
  13. }
复制代码
and after migration:
  1. package some.package;

  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;

  4. public MyClass {    

  5.   Logger logger = LoggerFactory.getLogger(MyClass.class);

  6.   public void someMethod() { 
  7.     logger.info("Hello world");
  8.   }
  9. }
复制代码



至此,log4j迁移到logback完成。

你可能感兴趣的:(JavaEE)