log4j - 通过匹配模式过滤日志-log4j

标签 log4j pattern-matching

我的log4j xml文件中具有以下布局模式:
"%d{ISO8601} %c %p [%t] [%x] 9.5.4.RC12 %m%n"
我想要的是,每当我收到包含消息process [proc#] completed的日志时,都应该将其跳过。我的意思是除包含此消息的日志外,所有日志均应打印。 [proc#]将包含最大长度为4的进程号。
我可以在xml配置文件中使用此功能来设计过滤器。如果是这样,那又如何?

最佳答案

ExpressionFilter可以做到这一点。

在追加程序定义内的过滤器定义中,使用类似于以下的表达式(注意LIKE是regex匹配运算符):

“MSG LIKE'进程\[。*\]已完成'”

请在此处查看ExpressionFilter javadoc:

http://logging.apache.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>

从此处获取的示例:http://blog.trifork.com/2011/08/23/filtering-specific-exceptions-when-using-log4j/

关于log4j - 通过匹配模式过滤日志-log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21304628/

相关文章:

java - Log4j 附加器大小

python - 匹配单词 "A"。如果 "B"是下一个单词,则也匹配

syntax - "match ... true -> foo | false -> bar"在 Ocaml 中是否有特殊含义?

sql - 如何在同一字段中先按数字排序查询,然后再按字符串排序

sql - 查询跨表的串联字段

java - Log4j 最大字符串长度或 Java 字符串连接错误?

java - Log4j 在测试类中不起作用

java - 在 log4j 2 中使用 throwable 和参数

java - 每个使用 Log4j 的用户都有不同的日志

rust - 如何匹配Rust中的嵌套字符串