Log4j不修改代码情况下桥接转换logback

转自:http://blog.csdn.net/chenminghe271/article/details/38682493

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

  1. <!-- logback日志配置开始 -->
  2.                 <dependency>
  3.                         <groupId>ch.qos.logback</groupId>
  4.                         <artifactId>logback-core</artifactId>
  5.                         <version>1.1.2</version>
  6.                 </dependency>
  7.                 <dependency>
  8.                         <groupId>ch.qos.logback</groupId>
  9.                         <artifactId>logback-access</artifactId>
  10.                         <version>1.1.2</version>
  11.                 </dependency>
  12.                 <dependency>
  13.                         <groupId>ch.qos.logback</groupId>
  14.                         <artifactId>logback-classic</artifactId>
  15.                         <version>1.1.2</version>
  16.                 </dependency>
  17.                 <dependency>
  18.                         <groupId>org.slf4j</groupId>
  19.                         <artifactId>log4j-over-slf4j</artifactId>
  20.                         <version>1.7.7</version>
  21.                 </dependency>
  22.                <!-- logback日志配置结束 -->
复制代码

第二  删除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. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.   <appender name="DC" class="ch.qos.logback.core.rolling.RollingFileAppender">
  4.     <File>../logs/devicecontrol.log</File>
  5.     <encoder>
  6.       <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
  7.     </encoder>
  8.     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  9.       <fileNamePattern>../logs/devicecontrol.log.%d{yyyy-MM-dd}</fileNamePattern>
  10.     </rollingPolicy>
  11.   </appender>
  12.   <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
  13.     <Target>System.out</Target>
  14.     <encoder>
  15.       <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
  16.     </encoder>
  17.   </appender>
  18.   <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  19.     <File>../logs/vod.log</File>
  20.     <encoder>
  21.       <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
  22.     </encoder>
  23.     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  24.     <fileNamePattern>../logs/vod.log.%d{yyyy-MM-dd}</fileNamePattern>
  25.     </rollingPolicy>
  26.   </appender>
  27.   <logger name="org.springframework" level="error"/>
  28.   <logger name="com.thunisoft.crs" level="error"/>
  29.   <logger name="jdbc.connection" level="OFF"/>
  30.   <logger name="com.thunisoft.artery" level="error"/>
  31.   <logger name="com.thunisoft.cas.service.devicecontrol" level="debug">
  32.     <appender-ref ref="DC"/>
  33.   </logger>
  34.   <logger name="org.apache" level="error"/>
  35.   <logger name="jdbc.resultset" level="OFF"/>
  36.   <logger name="com.thunisoft.summer" level="warn"/>
  37.   <logger name="org.hibernate" level="error"/>
  38.   <logger name="jdbc.audit" level="OFF"/>
  39.   <logger name="com.thunisoft.test" level="error"/>
  40.   <logger name="jdbc.sqlonly" level="INFO"/>
  41.   <logger name="jdbc.sqltiming" level="DEBUG"/>
  42.   <logger name="org.quartz.simpl" level="error"/>
  43.   <root level="info">
  44.     <appender-ref ref="Console"/>
  45.     <appender-ref ref="FILE"/>
  46.   </root>
  47. </configuration>
复制代码
第三  把打印日志类使用的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 完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值