При работе с пользовательскими фильтрами log4j получение «ERROR Filters содержит недопустимый элемент или атрибут StringMatchFilter» при запуске сервера tomcat
Мой класс
@Plugin(
name = "StringMatchFilter",
category = "Core",
elementType = "filter",
printObject = true
)
public class StringMatchFilter extends AbstractFilter {
@SuppressWarnings("unused")
private static final String VERSION = ModuleVersion
.register("$Id: StringMatchFilter.java 207693 2016-08-11 23:17:59Z DavisWalsh $");
private static final long serialVersionUID = 5382929677973762187L;
private boolean acceptOnMatch = true;
private String stringToMatch;
public void setStringToMatch(String s) {
stringToMatch = s;
}
public String getStringToMatch() {
return stringToMatch;
}
public void setAcceptOnMatch(boolean acceptOnMatch) {
this.acceptOnMatch = acceptOnMatch;
}
public boolean getAcceptOnMatch() {
return acceptOnMatch;
}
/**
* Called by log4j to decide if event is to be logged.
* @param event
* @return result
*/
@Override
public Result filter(final LogEvent event) {
String msg = event.getMessage().getFormattedMessage();
if(msg == null || stringToMatch == null)
return Result.NEUTRAL;
if( msg.indexOf(stringToMatch) == -1 ) {
return Result.NEUTRAL;
} else { // we've got a match
if(acceptOnMatch) {
return Result.ACCEPT;
} else {
return Result.DENY;
}
}
}
}
мой log4j2. xml выглядит файл как ниже
<Configuration status="warn" >
<Appenders>
<RollingRandomAccessFile name="Mytest" fileName="${sys:test.logdir}/TestRULES.log" filePattern="${sys:test.logdir}/TestRULES-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d [%20.20t] [%10.10X{pegathread}] [%20.20X{tenantid}] [%20.20X{app}] (%30.30c{3}) %-5p %X{stack} %X{userid} - %m%n</Pattern>
</PatternLayout>
<Filters>
<StringMatchFilter stringToMatch="StringMatchFilter"/>
</Filters>
</Appenders>
</Configuration>
Может ли кто-нибудь мне помочь. Даже для моего требования я пытаюсь использовать встроенный регистратор, т.е. "<RegexFilter regex=".*MatchFilter.*" onMatch="ACCEPT" onMismatch="DENY"/>
", но во время выполнения объект Filter не инициализируется. Я хотел бы знать, что-то не так я делаю?