IntelliJ:是否存在将旧式Log4J调用转换为新式SLF4J调用的意图操作?

veg*_*4me 5 java intellij-idea slf4j intellij-14

我正在开发一个使用过去使用过Log4J的遗留代码的项目,现在使用SLF4J.大多数旧式Log4J日志记录语句仍然存在,当我遇到它时,我将日志语句慢慢转换为新的SLF4J样式.

我刚刚意识到在旧式日志语句中按Alt+ Enter时会给我以下选项(遗憾的是我无法上传截图):

  • 将字符串连接文本复制到剪贴板
  • 注入语言或参考
  • 将'+'替换为'String.format()'
  • 将'+'替换为'StringBuilder.append()'
  • 将'+'替换为'java.test.MessageFormat.format()'

这个选项Replace '+' with 'String.format()'非常接近我需要的,虽然我不需要这个String.format(.

有什么东西可以给我一个意图行动:Replace Log4J style log statement with SLF4J style log statement

作为旧日志记录样式的一个例子(例如Log4J),我的意思是:

LOGGER.debug("User " + user.getUserId() + " has performed a search with the criteria " + dto);
Run Code Online (Sandbox Code Playgroud)

我的意思是新风格:

LOGGER.debug("User {} has performed a search with the criteria {}", user.getUserId(), dto);
Run Code Online (Sandbox Code Playgroud)

Bas*_*ers 12

你试过Java吗?记录问题| 非常量字符串连接作为记录调用检查的参数?它有一个quickfix,可以自动将字符串连接转换为参数化日志消息.

  • 找到了答案:快速修复可用的日志函数而不是字符串本身。 (2认同)

veg*_*4me 6

感谢 Wim Deblauwe 对 SSR 的评论,我发现了编辑 | 查找| 结构替换并使用以下内容来修复日志记录语句中使用两个参数的简单情况:

搜索模板:

LOGGER.debug("$str1$" + $arg1$ + "$str2$" + $arg2$)
Run Code Online (Sandbox Code Playgroud)

更换模板:

LOGGER.debug("$str1${}$str2${}", $arg1$, $arg2$)
Run Code Online (Sandbox Code Playgroud)

我怀疑我是否充分利用了结构搜索和替换功能,并且必须进行一些扫描才能获取所有日志记录语句,但这是巨大的进步。谢谢维姆。