如何从 log4j 堆栈跟踪中过滤某些行?

问题描述 投票:0回答:2

我想使用 log4j 从堆栈跟踪中过滤掉某些行(如

net.sf.cglib.*
org.springframework.*
)。可以用
log4j
来配置吗?

在 Eclipse 中,junit 插件允许您添加过滤器来修改 junit 选项卡中显示的堆栈跟踪,但这不会更改输出到控制台的堆栈跟踪。

log4j filtering
2个回答
3
投票

使用此过滤布局 log4j 插件: http://www.openmindlab.com/lab/tools/openutilslog4j/layout.html

他们在该页面上有一个带有 log4j.xml 的示例。只需使用 it.openutils.log4j.FilteredPatternLayout 而不是 log4j PatternLayout,然后放置一些条目,如

    <param name="Filter" value="net.sf.cglib"/>
    <param name="Filter" value="org.springframework"/>

如下。


0
投票

将此内容发布给未来使用 log4j2 的观众,他们可能会想知道这一点。 (在撰写本文时我正在使用 log4j2 v2.20.0)

要从堆栈跟踪中过滤某些包,您需要指定包列表,并在模式中使用

%xEx{filters(${filters})}
指令来指定要过滤的行:

<Configuration>
    <Properties>
        <Property name="STACKTRACE_EXCLUDE">
            java.base,
            java.lang,
            javax.servlet,
            jdk.internal,
            org.apache,
            org.springframework,
        </Property>
        <Property name="LOG_PATTERN">
            %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} %highlight{${LOG_LEVEL_PATTERN:-%5p}}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=green, DEBUG=green bold, TRACE=blue} %style{${sys:PID}}{magenta} [%15.15t][%X{dd.trace_id}][%X{dd.span_id}] %style{%-40.40C{1.}}{cyan} : %m%xEx{filters(${STACKTRACE_EXCLUDE})}%n
        </Property>
    </Properties>

    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
    </Appenders>

    <Loggers>
        <Logger name="org.mongodb.driver" level="warn"/>
        <Root level="info">
            <AppenderRef ref="CONSOLE"/>
        </Root>
    </Loggers>
</Configuration>

添加后,您应该看到堆栈跟踪开始如下所示:

java.lang.RuntimeException: oh no test exception
    at com.company.controller.MyController.doGet(MyController.java:262) [classes/:?]
    at com.company.controller.MyController$$FastClassBySpringCGLIB$$d73ec01b.invoke(<generated>) [classes/:?]
    ... suppressed 11 lines
    at com.company.controller.MyController$$EnhancerBySpringCGLIB$$3de58f01.doGet(<generated>) [classes/:?]
    ... suppressed 85 lines
© www.soinside.com 2019 - 2024. All rights reserved.