0

在使用 log4j 自定义过滤器时,在 tomcat 服务器启动时获取“错误过滤器包含无效的元素或属性 StringMatchFilter”

我的课

@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"/>”,但在运行时过滤器对象没有被初始化。我想知道我做错了什么?

4

0 回答 0