Пользовательский фильтр Log4j2 не работает, получая Фильтры содержат недопустимый элемент или атрибут - PullRequest
0 голосов
/ 20 апреля 2020

При работе с пользовательскими фильтрами 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 не инициализируется. Я хотел бы знать, что-то не так я делаю?

...