我试图在项目中找到错误记录throwable的日志行。正确和错误用法的示例:
// Correct
catch (Exception e)
{
Log.error(className, "something went wrong", e);
}
// Incorrect, exception not logged
catch (Throwable t)
{
String errMsg = "something went wrong";
Log.fatal(className, errMsg);
}
// Incorrect, exception name concatenated instead of providing exception to print stacktrace
catch (IOException exception)
{
Log.error(className, "Unable to read file " + exception);
}
字符串
还显示了异常类型的变体和异常变量的名称。
我目前最接近的表达式是catch\s*\(\w+\s+(\w+)\)\s*\{[\s\S]*Log\s*\.\w+\(\s*\w+,[\s\S]*(?!,\b\1\b\);)\);
。它匹配catch
块的开头,并捕获用于保存异常的变量名,然后试图找到一个Log.<level>(
行,该行 * 不 * 以异常变量作为最后一个参数结束,即, e);
。它跳过上面的第一个示例,捕获其他两个。
问题:我试着在这里测试表达式https://regexr.com/7p58l,它忽略了一个重要的情况:在另一个地方日志记录是正确的,regex找不到第一个不正确的示例。
catch (Exception e)
{
// Regex should capture here, but does not
Log.error(className, "something something exception");
}
void someMethod() {
catch (Exception e)
{
// Because this line hits the negative lookahead
Log.error(className, "something something exception", e);
}
}
型
我所有在负先行后添加字符的尝试似乎都以某种形式破坏了它。需要添加什么才能找到所有不正确的情况?
这将被放入Intellij的全局查找中,因此如果Intellij中的工具能更好地工作,那将是非常感谢的。
1条答案
按热度按时间rwqw0loc1#
为了实现你的目标,你可以使用一个正则表达式来确保catch块中没有正确的异常日志记录。关键是要确保如果catch块中有任何日志记录,它不会正确记录异常。下面是一个修改后的正则表达式,它应该适用于你的情况:
字符串