假设我在Person类下面有一个getAccountNumber((方法,该方法具有@ShouldNotBeLogged自定义注释。
public class Person {
private String name;
private String accountNumber;
@ShouldNotBeLogged
public String getAccountNumber() {
return accountNumber;
}
}
考虑到上面的Person类,我想找到使用Logger类记录getAccountNumber((方法的所有情况-error|warn|debug|info方法,如下面的HelloWorld类logMessage方法。请注意,在实际代码中有许多方法带有ShouldNotBeLogged注释,因此我们无法在其中创建方法名称的搜索。
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class HelloWorld {
private static final Logger logger = LogManager.getLogger(HelloWorld.class);
public void logMessage(Person person) {
logger.debug("logging Acc No. - {}", person.getAccountNumber()); // Occurence Type 1
LogManager.getLogger(HelloWorld.class).info("Account Number - {}", person.getAccountNumber()); // Occurence Type 2
}
}
我已经尝试使用方法调用现有模板,并为$MethodCall$提供了带有-error|warn|debug|info的文本过滤器,它找到了带有error、warn、debug或info名称的Logger方法。无法为$Instance$&参数$where Instance将是Logger类型(可以实例化为类的常量,也可以直接使用Logger类方法(,Parameter将是对@ShouldNotBeLogged注释方法的调用。
$Instance$$MethodCall$($Parameter$(
我正在使用IntelliJ IDEA 2022.2(终极版(
这是一个困难的情况。希望这能对你有所帮助。
首先,创建一个搜索,查找@ShouldNotBeLogged
注释的方法:
@ShouldNotBeLogged
$ReturnType$ $Method$($ParameterType$ $Parameter$);
在$Parameter$
上使用计数修饰符[0,∞]
(该模板基于现有模板"不推荐的方法"(。将此模板保存在一个名称下,例如";不应该被记录的方法";。
$logger$.$call$($arg1$, $method$())
修改器:$logger$
:type=Logger
$method$
:reference=Methods that should not be logged
这将查找所有以调用@ShouldNotBeLogged
注释方法作为第二个参数的记录器调用。
不幸的是,如果您想在不同的位置找到对@ShouldNotBeLogged
注释方法进行调用的记录器调用,则必须构造一个单独的查询模板。例如:
$logger$.$call$($arg1$, $arg2$, $method$())