项目中 日志框架 由Log4j替换为Logback
1.为什么要替换?
下面引用Logback官方的一句话:“某些关键操作,比如判定是否记录一条日志语句的操作,其性能得到了显著的提高。这个操作在LogBack中需要3纳秒,而在Log4J中则需要30纳秒。LogBack创建记录器(logger)的速度也更快:13毫秒,而在Log4J中需要23毫秒。更重要的是,它获取已存在的记录器只需94纳秒,而Log4J需要2234纳秒,时间减少到了1/23。跟JUL相比的性能提高也是显著的”。
注:JUL:java.util.logging
2.怎么替换
2.1 替换jar包
所需jar包:
logback-access-0.9.24.jar
logback-classic-0.9.24.jar
logback-core-0.9.24.jar
slf4j-api-1.6.1.jar
jcl-over-slf4j-1.6.1.jar(此jar用于兼容 Spring等依赖包中的org.apache.commons.logging.*)
需要删除的jar包:
log4j-1.2.17.jar
slf4j-log4j12-1.7.2.jar(如果有,也删除)
2.1 替换日志配置文件
log4j 框架需要log4j.properties,而logback 的配置文件是logback.xml格式的。如果你 的配置文件是log4j.properties ,那么恭喜你,很简单,直接到以下地址转换:
log4j.properties to logback.xml Translator (http://logback.qos.ch/translator/)即可。如果不是,那么要自己写logback.xml配置了。然后把logback.xml放到相应的读取路径下,删掉log4j配置文件即可。
2.3 代码转换
如果用的是org.apache.commons.logging.* 恭喜你,可以完全不用更改动代码,即可完成迁移(参考jcl-over-slf4j-1.6.1.jar)。
如果你用的是org.apache.log4j.Logger,那么就要修改代码:
1) import org.apache.log4j.Logger; à importorg.slf4j.Logger; import org.slf4j.LoggerFactory;
2) private static Logger LOG =Logger.getLogger(ServerRunner.class); à private static Logger LOG =LoggerFactory.getLogger(ServerRunner.class);
3) 如果你对log4j有过封装,那么只替换一个地方即可;如果没有的话,恐怕每个输出日志的类文件都要改动了。工作量很大,推荐一个文本替换工 具:SearchAndReplace。同时建议对logback封装一层,方便维护。
最简单的方法就是用文本替换工具(推荐使用SearchAndReplace),替换掉log4j代码。
如图:(其他代码替换方式类同)
2.4 初始化日志配置
public static void initLogback() {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
lc.reset();
try {
configurator.doConfigure("/config/logback.xml");
} catch (JoranException e) {
e.printStackTrace();
}
}
如果logback.xml在类路径下,可以直接运行,省去上面的代码。
3 完成
至此,已经完成整个替换过程,编译,运行即可。