You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Log4j2中过滤匹配特定正则的堆栈跟踪行?

解决Log4j2过滤堆栈跟踪中CGLIB代理类行的问题

你之前使用的RegexFilter仅作用于日志消息主体,无法处理堆栈跟踪内的行。要过滤栈帧中含$$的CGLIB代理类行,可采用以下两种方案:

方案一:使用Log4j2内置RegexStackTraceFilter

Log4j2提供了专门针对堆栈跟踪元素的RegexStackTraceFilter,可直接匹配栈元素的类名或方法名。在布局配置中指定该过滤器即可:

XML配置示例

<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n%xEx{filters(org.apache.logging.log4j.core.filter.RegexStackTraceFilter)}{regex=.*\\$\\$.*}{onMatch=DENY}{onMismatch=ACCEPT}"/>
    </Console>
</Appenders>

YAML配置示例

Appenders:
  Console:
    name: Console
    target: SYSTEM_OUT
    PatternLayout:
      pattern: "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n%xEx{filters(org.apache.logging.log4j.core.filter.RegexStackTraceFilter)}{regex=.*\\$\\$.*}{onMatch=DENY}{onMismatch=ACCEPT}"

该配置会让%xEx转换符渲染堆栈跟踪时,自动过滤掉类名包含$$的栈帧行。

方案二:自定义StackTraceElementFilter

若内置过滤器无法满足需求,可自定义过滤器类,实现org.apache.logging.log4j.core.filter.StackTraceElementFilter接口:

import org.apache.logging.log4j.core.filter.StackTraceElementFilter;
import java.util.function.Predicate;

public class CglibProxyStackTraceFilter implements StackTraceElementFilter {
    @Override
    public Predicate<StackTraceElement> getFilter() {
        // 过滤类名包含$$的栈元素
        return element -> !element.getClassName().contains("$$");
    }
}

随后在布局配置中引用该自定义过滤器:

XML配置示例

<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n%xEx{filters(com.myapp.filter.CglibProxyStackTraceFilter)}"/>

YAML配置示例

Appenders:
  Console:
    name: Console
    target: SYSTEM_OUT
    PatternLayout:
      pattern: "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n%xEx{filters(com.myapp.filter.CglibProxyStackTraceFilter)}"

通过上述配置,即可精准过滤Spring CGLIB生成的代理类栈帧行,同时保留其余有用的堆栈信息。

内容的提问来源于stack exchange,提问作者Flavian-Calinic Stuparu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 16:56:12