通过匹配模式-log4j过滤日志[英] Filter log by matching pattern - log4j

本文是小编为大家收集整理的关于通过匹配模式-log4j过滤日志的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。

问题描述

我在我的log4j xml文件中具有以下布局模式:

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

我想要的是,每当我得到包含消息的日志process [proc#] completed时,都应该跳过.我的意思是每个日志都应打印包含此消息的日志. [proc#]将包含最大Lenght 4的过程数. 我可以在XML配置文件中使用此功能来描述一个过滤器.如果是这样,那么如何?

推荐答案

表达式缩写器可以做到.

在appender定义中的过滤器定义中,使用类似于(请注意的是Regex Match Operator)的表达式:

" msg喜欢'process \ [.*\]完成'

请参阅此处的ExpressionFilter Javadoc:

.org/log4j/companions/apidocs/org/apache/log4j/filter/expressionfilter.html

示例:

<?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>

示例从这里取: httpp ://blog.trifork.com/2011/08/23/filtering-specific-exceptions-when-using-log4j/

其他推荐答案

这是我配置Log4J通过IP地址过滤出来的方式.特别是127.0.0.1如下所示.注意,您还必须在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>

本文地址:https://www.itbaoku.cn/post/1575010.html

问题描述

I have the following layout patter in my log4j xml file:

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

What I want is that when ever I get a log containing message process [proc#] completed, it should be skipped. I mean every log except the one containing this message should be printed. [proc#] will contain the process number of max lenght 4. What can I desing a filter with this function in my xml config file. If so, then how?

推荐答案

ExpressionFilter can do that.

In a filter definition inside an appender definition, use an expression similar to (note LIKE is the regex match operator):

"MSG LIKE 'process \[.*\] completed'"

See ExpressionFilter javadoc here:

http://logging.apache.org/log4j/companions/apidocs/org/apache/log4j/filter/ExpressionFilter.html

Example:

<?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>

Example taken from here: http://blog.trifork.com/2011/08/23/filtering-specific-exceptions-when-using-log4j/

其他推荐答案

This is how I've configured log4j to filter out by IP address. In particular 127.0.0.1 as illustrated in log4j.xml below. Note, you must also include log4j.dtd alongside log4j.xml. You must use the XML syntax.

<?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>