【问题标题】:Issue with Rule squid:S1166 - Using Util method to log exceptionRule squid:S1166 的问题 - 使用 Util 方法记录异常
【发布时间】:2018-04-19 06:50:31
【问题描述】:

我们正在使用 util 方法来处理捕获的异常。即使我们正在从 Util 方法记录异常,我们也会收到此 Sonar Qube 违规“记录或重新抛出此异常”。

示例代码:

catch (Exception e) {
            LogUtils.logErr(e);
        }


LogUtils.logErr(e):

public static void logErr(Throwable e) {
        StackTraceElement[] ste = Thread.currentThread()
                .getStackTrace();
        String className = ste[2].getClassName();
        String methodName = ste[2].getMethodName();
        logger.error(buildMessage(className, methodName, ""), e);
        sendEmail(null, e);
    }

如果有办法让声纳忽略这种用法,请告诉我。 提供的规则似乎存在问题。请确认..

【问题讨论】:

    标签: java sonarqube


    【解决方案1】:

    抱歉,评论太长了……

    你的环境是什么?您如何执行分析?

    我创建了两个类:

    public class S1166 {
    
        public static Integer parse(String text) {
            try {
                return Integer.parseInt(text);
            } catch (Exception e) {
                LogUtils.log(e);
                return null;
            }
        }
    }
    

    LogUtils:

    public final class LogUtils {
        private static final Logger logger = Logger.getLogger("name");
    
        private LogUtils() {
            // blocks the possibility to create a new instance
        }
    
        public static void log(Throwable e) {
            StackTraceElement[] ste = Thread.currentThread().getStackTrace();
            String className = ste[2].getClassName();
            String methodName = ste[2].getMethodName();
            logger.log(Level.FINEST, String.format("%s#%s", className, methodName), e);
        }
    }
    

    SonarQube 没有发现任何问题。

    环境:

    • SonarQube 7.0
    • SonarJava 5.2

    【讨论】:

    • 感谢您的回复,我再次验证了它的工作正常。
    • 我在某些地方只记录异常消息而不是完全异常是导致问题的原因,我忽略了它,抱歉浪费了您的时间:(
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2015-02-12
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多