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

IntelliJ: Is there an Intention Action to convert old style Log4J calls to new style SLF4J calls?

我正在处理一个包含遗留代码的项目,该项目过去曾使用 Log4J,现在使用 SLF4J。大多数旧式 Log4J 日志语句仍然存在,我在遇到它们时将日志语句慢慢转换为新的 SLF4J 样式。

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

选项 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);

新风格是指:

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

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

搜索模板:

LOGGER.debug("$str1$" + $arg1$ + "$str2$" + $arg2$)

替换模板:

LOGGER.debug("$str1${}$str2${}", $arg1$, $arg2$)

我怀疑我是否正在最大程度地使用结构搜索和替换功能,并且必须进行几次扫描才能获取所有日志记录语句,但这是一个很大的进步。谢谢维姆。

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