如何修复Sonar提示「仅应条件性调用方法」的代码问题?
修复Sonar检测的"仅应条件性调用方法"问题
你的代码:
logger.debug("Message:Request", new Gson().toJson(req));
Sonar检测提示:
仅应条件性调用方法(Invoke method(s) only conditionally)
问题原因
不管当前日志级别是否为DEBUG,new Gson().toJson(req)都会被执行,这会带来额外的序列化开销——尤其是当req对象体积较大时,这种不必要的性能损耗会更明显。
修复方案
有两种常用的修复方式:
方式一:先判断日志级别再执行序列化
手动检查DEBUG级别是否开启,只有开启时才执行序列化并打印日志:
if (logger.isDebugEnabled()) { logger.debug("Message:Request", new Gson().toJson(req)); }
方式二:利用SLF4J的延迟加载特性(推荐)
如果你的日志框架基于SLF4J(比如Logback、Log4j2),可以使用带Supplier参数的重载方法,序列化逻辑会在日志级别开启时才执行:
logger.debug("Message:Request", () -> new Gson().toJson(req));
内容的提问来源于stack exchange,提问作者NEHA SINGH
相关产品推荐
相关产品推荐

