发现catch块内log方法使用不当

问题描述 投票:0回答:1

我之前尝试在 this 问题中解决这个问题,但尝试使用普通的正则表达式并没有完全奏效。

在我正在从事的项目中,日志方法提供以下内容

public static void info(Object source, String message)
public static void info(Object source, String message, Throwable t)

适用于各种日志记录级别。

但是,这些方法的使用方式不正确,没有记录所有信息。

// Bad example 1
try {
    // something
} catch (Exception e) {
    Log.error(this, "oops");
}

// Bad example 2
try {
    // something
} catch (Exception e) {
    Log.error(this, "oops " + e);
}

// Bad example 3
try {
    // something
} catch (Exception e) {
    Log.error(this, "oops " + e.getMessage());
}

// Correct usage
try {
    // something
} catch (Exception e) {
    Log.error(this, "oops", e);
}

// Also correct
try {
    // something
} catch (Exception e) {
    Log.error(this, "oops", e);
    Log.info(this, "also doing this other thing");
}

// Technically correct specifically for ignored, but should probably be logged anyway
try {
    // something
} catch (Exception ignored) {
    Log.error(this, "oops");
}

// Technically correct, but rarely seen and should probably be changed anyway
try {
    // something
} catch (Exception e) {
    Log.error(this, "oops");
    throw new OtherException(e);
}

不良示例在调试时是令人头痛的一个原因,因为完整的异常不包含在日志中。

我的问题是:如何找到在 catch 块中错误使用日志行的所有情况?即,异常既不用作日志方法的参数,也不用作重新引发异常的原因。上面链接的问题试图使用正则表达式找到这些,但大多数建议的解决方案都有相当高的失败率(要么匹配太多正确的用法,要么不匹配所有不正确的用法)。

我使用 Intellij 作为我的 IDE,所以如果它有任何有助于实现此目的的工具,也很高兴知道。

此外,这是一个又大又老的项目。直接重构

Log
方法可能会比较费力;查找和替换是最好的,但可以考虑所有选项。

java exception intellij-idea logging
1个回答
0
投票
  1. 向 Intellij 添加 sonarlint 插件
  2. 扫描二维码
  3. 查找所有警告https://sonarsource.atlassian.net/browse/RSPEC-1166“要么记录此异常并处理它,要么使用一些上下文信息重新抛出它。”
© www.soinside.com 2019 - 2024. All rights reserved.