gpt4 book ai didi

java - Log4j2 RegexFilter 模式不匹配

转载 作者:行者123 更新时间:2023-12-01 14:21:25 25 4
gpt4 key购买 nike

我的日志中有以下几行要排除,所以我想使用 RegexFilter这样做:

[INFO ] 2018-05-20 14:52:15.993 [qtp22844606-20] TimingFilter - Request time: 16 ms

[INFO ] 2018-05-20 14:52:18.998 [qtp22844606-17] TimingFilter - Request time: 15 ms

[INFO ] 2018-05-20 14:52:22.001 [qtp22844606-20] TimingFilter - Request time: 0 ms

[INFO ] 2018-05-20 14:52:24.992 [qtp22844606-17] TimingFilter - Request time: 0 ms



我的配置如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<RegexFilter regex=".*TimingFilter.*" useRawMsg="true" onMatch="DENY" onMismatch="ACCEPT"/>
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="info" additivity="false">
<appender-ref ref="console" />
</Root>
</Loggers>
</Configuration>

当切换“接受”和“拒绝”时,没有消息通过,因此 RegexFilter 本身似乎被拾取。我也试过 "\bTimingFilter\b", ".*\bTimingFilter\b.*"没有成功。

我正在使用 Log4J 2.11。

你能给出任何提示我做错了什么吗?我检查了所有其他 RegexFilter相关问题here以及其他站点(这是我获得有关我尝试过的正则表达式模式的建议的地方),但似乎没有任何效果。
我还检查了 https://regex101.com/ 上的模式根据我的日志,它们匹配正确。

最佳答案

发生这种情况是因为您有 useRawMsg="true"将其切换为 useRawMsg="false"。见 log4j2 manual :

If true the unformatted message will be used, otherwise the formatted message will be used. The default value is false.



编辑:

我没有仔细查看您的配置和输出,因此我对此深表歉意。原因 RegexFilter对您不起作用是您正在使用它尝试根据 name of the logger 进行过滤.根据 log4j2 manual :

The RegexFilter allows the formatted or unformatted message to be compared against a regular expression.



要防止记录器记录任何消息,您有多种选择。我将在下面用一些示例代码来说明其中之一。

这是一个运行 TimingFilter 的主类类(class):
package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Main {

private static final Logger log = LogManager.getLogger();

public static void main(String[] args){
log.info("Here's some info!");
log.error("Some erorr happened!");
TimingFilter.main(null);
}

}

这是 TimingFilter 类:
package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class TimingFilter {

private static final Logger log = LogManager.getLogger();

public static void main(String[] args){
log.info("Here's some info!");
log.error("Some erorr happened!");
}
}

这是一个示例 log4j2.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger level="off" name="example.TimingFilter">
</Logger>
<Root level="info" additivity="false">
<appender-ref ref="console" />
</Root>
</Loggers>
</Configuration>

请注意我如何配置 example.TimingFilter记录器,使其级别为“关闭”。这会阻止来自此记录器的任何日志记录。

当我运行 Main类输出仅包含来自 Main 的消息:
[INFO ] 2018-05-22 23:23:30.473 [main] Main - Here's some info!
[ERROR] 2018-05-22 23:23:30.474 [main] Main - Some erorr happened!

关于java - Log4j2 RegexFilter 模式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50435243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com