Rule squid的问题:S1166 - 使用Util方法记录异常

时间:2018-04-16 14:05:05

标签: java sonarqube

我们正在使用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);
    }

请让我知道是否有解决方法让声纳忽略这种用法。 它看起来像提供的规则的问题。请确认..

1 个答案:

答案 0 :(得分:0)

我道歉,但评论太长了......

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

我创建了两个类:

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