我之前尝试在 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
方法可能会比较费力;查找和替换是最好的,但可以考虑所有选项。