java – Eclipse – Sonar S2629可能带有新String的误报
我正在使用最新的
Eclipse和Sonar插件
在answer中记录以下行: log.debug("Request body: {}",new String(body,"UTF-8")); 只有在DEBUG级别时才应创建String: /** * Log a message at the DEBUG level according to the specified format * and argument. * <p/> * <p>This form avoids superfluous object creation when the logger * is disabled for the DEBUG level. </p> * * @param format the format string * @param arg the argument */ public void debug(String format,Object arg); 但是Sonar将它标记为鱿鱼:S2629:
并举例说明连接
这是一个假阳性声纳警告还是我错过了什么? 这不是this question的重复,它通常询问规则概念,即连接,但不是格式化创建对象作为新String 另外link的回答说创建新的Date()不会产生内置格式的问题:
解决方法
在非DEBUG模式下行
log.debug("Request body: {}","UTF-8")); 代替 log.debug(MessageFormatter.format("Request body: {}","UTF-8"))); 避免创建通过 这意味着它不是误报,因为在调用日志记录方法之前首先计算参数. 只要SLF4J does not support lambda expression to lazy evaluate arguments(见comment by ZhekaKozlov),可以使用以下实用方法作为变通方法: private static Object lazyToString(final Supplier<String> stringSupplier) { return new Object() { @Override public String toString() { return stringSupplier.get(); } }; } 这可以用于限制将字节数组转换为字符串到DEBUG模式: log.debug("Request body: {}",lazyToString(() -> new String(body,StandardCharsets.UTF_8))); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 用于wss协议的Apache反向代理
- SpringMVC的执行流程及组件详解
- 详解Java的Spring框架中bean的注入集合
- java – Log4J:无法在FileAppender中使用bufferedIO = tru
- java – 当我使用Launch4j添加一个Splash Screen时,我得到一
- 简单介绍Java网络编程中的HTTP请求
- Java基础(1)
- java – ThreadLocal是否可以安全地与Tomcat NIO Connector
- com.sun.mail.smtp.SMTPSendFailedException:530-5.5.1需要
- 前后端交互之封装Ajax+SpringMVC源码分析