当前位置: 首页 > 知识库问答 >
问题:

我的Java代码中的关键SonarLint问题S1166是否为假阳性?

殳经略
2023-03-14

SonarLint 1.0.0 for Eclipse在我的代码中标记了一个关键问题,我不知道为什么以及如何修复它。对我来说,这真的像是假阳性,还是我遗漏了什么?

import org.apache.log4j.Logger;

[...]

public final class Foo {

    private static final Logger logger = Logger.getLogger(Foo.class);

    [...]

    public static void foo() {

        MyCommand command = new MyCommand(foo, bar);
        try {
            commandService.executeCommand(command);
        } catch (CommandException e) {
            logger.error("My command execution failed", e);
        }
    }

    [...]

以下是匹配SonarLint规则描述的摘录:

处理捕获的异常时,应记录原始异常的消息和堆栈跟踪或向前传递。

// Noncompliant - exception is lost
try { /* ... */ } catch (Exception e) { LOGGER.info("context"); }   

// Noncompliant - exception is lost (only message is preserved)       
try { /* ... */ } catch (Exception e) { LOGGER.info(e.getMessage()); }

// Noncompliant - exception is lost
try { /* ... */ } catch (Exception e) { throw new RuntimeException("context"); }
try { /* ... */ } catch (Exception e) { LOGGER.info(e); }   

try { /* ... */ } catch (Exception e) { throw new RuntimeException(e); }

try {   /* ... */ } catch (RuntimeException e) {
    doSomething();  
    throw e;
} catch (Exception e) {
    // Conversion into unchecked exception is also allowed
    throw new RuntimeException(e);
}

在我看来,我的代码符合给定兼容解决方案的第一个变体,但是SonarLint不接受它。

不久前还讨论了声纳规则S1166,但实际上与我讨论的问题不同。

编辑:回答下面的问题:我使用log4j进行日志记录。我扩展了代码以反映这一点。

共有1个答案

咸皓
2023-03-14

实际上,您正在记录原始异常的消息和堆栈跟踪;这是一个错误的发现。

规则可能没有Log4j的特定知识,但是缺乏对所有日志库的全知,将异常作为参数传递就足够了。

 类似资料:
  • 我试图使java编译类文件,但它抛出了一个错误,如何修复它。

  • 我拿不到输出。。有人能帮我得到输出吗 下面给出了程序运行的示例(注意:下面的粗体文本是用户输入的输入): 进入三角形的三个边

  • 问题内容: 我来自C ++,所以我不太了解Java的一项功能。我已经读过,除原始元素外,所有对象都必须使用关键字创建。现在,如果编译器可以识别原始类型,并且不允许您创建一个不带构造函数的对象,那么为什么根本没有关键字呢?有人可以提供一个示例,说明两行代码,除了存在的,相同,编译且具有不同的含义/结果之外,相同吗? 只是为了澄清我的意思是多余,并希望使我的问题更清楚。是否添加任何东西?语言是否可以通

  • **这是我的java代码,预期输出如下: 输入第一个数字:25 输入第二个数字:5 25 x 5=125 在我插入代码并运行它之后,输出与答案相差太大 以下是输出: 如何修复我的代码?

  • 问题内容: 因此,我正在尝试使用a 将自己的值映射到一个值。我的对象在下面(为简洁起见删除了一些代码) 我通过从文本文件加载数据将一堆这些对象映射为字符串。稍后,基于(独立)用户输入,我尝试使用Object 查询。containsKey()返回false,而get()返回null,就好像我从未将密钥添加到映射中一样。但是,奇怪的是,如果我使用迭代在地图上下面的代码(其中是从用户输入制造) 我为代码

  • 本文向大家介绍java中的异或问题代码解析,包括了java中的异或问题代码解析的使用技巧和注意事项,需要的朋友参考一下 java的位运算符中有一个叫异或的运算符,用符号(^)表示,其运算规则是:两个操作数的位中,相同则结果为0,不同则结果为1。下面看一个例子: 运行结果是:i^j=13. 分析上面程序,i=15转成二进制是1111,j=2转成二进制是0010,根据异或的运算规则得到的是1101,转