按匹配模式筛选日志-log4j

按匹配模式筛选日志-log4j,log4j,pattern-matching,Log4j,Pattern Matching,我的log4jxml文件中有以下布局模式: %d{ISO8601}%c%p[%t][%x]9.5.4.RC12%m%n“ 我想要的是,当我得到一个包含消息process[proc#]completed的日志时,应该跳过它。我的意思是,除了包含此消息的日志外,其他日志都应该打印出来[proc#]将包含最大长度为4的过程编号。 在xml配置文件中使用此函数可以设计过滤器。如果是这样的话,那么如何实现呢?ExpressionFilter可以做到这一点 在appender定义内的筛选器定义中,使用类似的

我的log4jxml文件中有以下布局模式:

%d{ISO8601}%c%p[%t][%x]9.5.4.RC12%m%n“

我想要的是,当我得到一个包含消息
process[proc#]completed
的日志时,应该跳过它。我的意思是,除了包含此消息的日志外,其他日志都应该打印出来<代码>[proc#]将包含最大长度为4的过程编号。
在xml配置文件中使用此函数可以设计过滤器。如果是这样的话,那么如何实现呢?

ExpressionFilter可以做到这一点

在appender定义内的筛选器定义中,使用类似的表达式(注意类似于正则表达式匹配运算符):

“类似于消息的‘进程\[.\]已完成’”

请参见此处的ExpressionFilter javadoc:

示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="CONSOLE">
        <param name="Target" value="System.out"/>
        <layout>
            <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.filter.ExpressionFilter">
            <param name="expression" value="EXCEPTION ~= com.company.BackendNotAvailableException" />
            <param name="acceptOnMatch" value="false"/>
        </filter>
    </appender>
    <root>
        <priority value ="INFO" />
        <appender-ref ref="CONSOLE"/>
    </root>
</log4j:configuration>


这就是我配置log4j以按IP地址过滤的方式。特别是
127.0.0.1
,如下面的
log4j.xml
所示。注意,您还必须在
log4j.xml
旁边包含
log4j.dtd
。您必须使用XML语法

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="CATALINA" 
            class="org.apache.log4j.DailyRollingFileAppender">
        <param name="Append" value="true" />
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
        <param name="Encoding" value="UTF-8" />
        <param name="File" value="${catalina.base}/logs/catalina" />
        <layout class="net.logstash.log4j.JSONEventLayoutV1" />
    </appender>
    <appender name="CATALINAOUT" 
            class="org.apache.log4j.ConsoleAppender">
        <param name="Append" value="true" />
        <param name="Encoding" value="UTF-8" />
        <param name="File" value="${catalina.base}/logs/catalina.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" 
                value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>


        <filter class="org.apache.log4j.filter.ExpressionFilter">
            <param name="expression" value="MSG LIKE '127.0.0.1'" />
            <param name="acceptOnMatch" value="false"/>
        </filter>


    </appender>
    <appender name="LOCALHOST" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="Append" value="true" />
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
        <param name="Encoding" value="UTF-8" />
        <param name="File" value="${catalina.base}/logs/localhost" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %c- %m%n" />
        </layout>
    </appender>
    <logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]">
        <level value="INFO" />
        <appender-ref ref="LOCALHOST" />
    </logger>
    <root>
        <level value="INFO" />
        <appender-ref ref="CATALINA" />
        <appender-ref ref="CATALINAOUT" />
    </root>
</log4j:configuration>


操作符做什么?`它是不区分大小写的部分文本匹配。谢谢。是否有所有运算符及其含义的列表?在“帮助”菜单下有一个教程-教程列出了所有运算符。哪个“帮助”菜单?上下文?有一个方便的工具可以将
log4j.properties
转换为
log4j.xml
。我用它来生成除了
元素以外的所有内容。