将Log4J log.debug语句迁移到SLF4J的参数化消息?

时间:2011-07-16 17:21:53

标签: migration log4j slf4j parameterized

我有大约400个生产Java源代码文件,每行有大约数十到两万行代码,从Log4J字符串连接更改为SLF4J的参数化日志记录。

if(log.isDebugEnabled(){
    log.debug("Came here with value: " + car.getName());
}

我想利用SLF4J的日志参数化

  

log.debug(“Came here with value:{}”,car.getName());

我在考虑编写一个脚本来自动化这个过程,或者实际上是否有办法实现这个目标?

我想更改为SLF4J的参数化日志记录的主要原因是performance

由于LogBack + SLF4J将使用SLF4J + Log4J需要JavaSE 5及更高版本,而我需要在J2SE 1.4 JVM环境中工作。

1 个答案:

答案 0 :(得分:3)

我怀疑使用SLF4J / LOG4J时会有任何性能提升 org.slf4j.impl.Log4jLoggerAdapter将使用与您已经完成的代码几乎相同的代码(两次评估是否启用了记录器)。它首先检查是否启用了调试日志记录,然后将格式化的消息发送到org.apache.log4j.Category,再次检查是否应该在配置的级别中记录消息。

Neverthelsse它可以更改为参数化日志记录,因为它更具可读性和更短。不幸的是,我不知道任何重构方法来重构代码。

编辑:注意到存在SLF4J Migrator,这似乎有助于进行一些基本的迁移(导入行和记录器声明)。这可能有助于开始迁移 - 即使记录语句不会被触及并且必须手动重构。