java代码迁移工具_《SLF4J官方文档》SLF4J迁移工具

SLF4J迁移者

SLF4J迁移者是一个很小的Java工具,用于将Java源文件从Jakata Commons Logging(JCL)迁移到SLF4J。它也能将文件从log4j迁移到SLF4J,或者从java.util.logging API到SLF4J。

SLF4J迁移者包括一个独立的jar文件,可以像独立运营的java应用一样运行。命令如下:

Java –jar slf4j-migrator-1.7.21.jar

一旦应用运行了,一个像下面的窗口会显示:

slf4j-migrator.gif此应用的使用应该是一目了然的。请注意迁移工具只是原地替换java文件,这意味着将没有已修改文件的备份。在使用SLF4J迁移者前,你有义务备份你的文件。

限制

SLF4J迁移者作为一个简单的工具,用于帮你将使用JCL,log4j或JUL的项目文件迁移到SLF4J。它只能进行基本的转换步骤。本质上来说,它将替换适当的导入行(import lines)和日志器声明(logger declarations)。

MyClass是个使用JCL的简单类,替换前如下:

package some.package;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public MyClass {

Log logger = LogFactory.getLog(MyClass.class);

public void someMethod() {

logger.info("Hello world");

}

}

迁移后如下:

package some.package;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public MyClass {

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

public void someMethod() {

logger.info("Hello world");

}

}

尽管转换规则很基本,但SLF4J迁移者仍可以大大缓解java项目从JCL到SLF4J迁移的繁重工作。从log4j到SLF4J,或从JUL到SLF4J的迁移规则是类似的。

一般限制

•生成脚本不会被修改

您的Ant / Maven/Ivy生成脚本需要手动修改为使用SLF4J,而不是JCL或log4j。

•只有支持String类型的消息

如果您的日志声明的包含非字符串对象作为其唯一的参数,你将不得不在对象上手动添加一个toString()方法调用。

例如:

logger.debug(new Object());

已被手动重新写为

logger.debug(new Object().toString());

•不支持FATAL级别。

你必须将它们手动转换。 此限制不被视为非常严重的,因为通常有极少数的日志声明承载FATAL级别。

•如果一个方法声明在同一行的多个日志器,转换将是不完整的。 例:

public void someMethod(Log l1, Log l2) {

...

}

will be converted as

public void someMethod(Log l1, Logger l2) {

...

}

从log4j的迁移时限制

•NDC语句保持原样

由于NDC不支持SLF4J,迁移者不能正确处理NDC语句。 你必须手动进行迁移到MDC。 同样,因为通常很少NDC语句,即使在大型项目中此限制不被视为严重。

请注意,相反,NDC,因为SLF4J支持这样的语句MDC陈述正确迁移。

•调用PropertyConfigurator或DomConfigurator无法迁移,因为他们没有SLF4J对应项。

从JUL迁移时的限制

•java.util.logging.Logger调用finest() finer()或finest()方法都保留原样。

鉴于finest() finer()或finest()调用可以映射到两个trace()或debug()调用在SLF4J,不可能猜出用户希望如何这些调用映射。

•所有匹配的字符串“.severe(”会由字符串“.error(”替换,不带任何上下文分析。同样地,所有的字符串匹配“.warning(”是由“.warn(”所取代。

由于匹配/替换操作不是根据语境更改的,如果你的代码包含了一个名为”severe” 或 “warning”,,那么迁移的结果将具有编译错误的方法。 幸运的是,这样的错误应该是罕见的,易于识别的。

•在定义下面的方法调用java.util.logging.Logger类需要手动迁移:log,logp,logrb,entering,exiting。

d0c1501a6d8bb921cf36400dc89de69f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值