回溯日志 - 过滤堆栈跟踪

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

我在使用logback做日志记录,发现堆栈跟踪过滤有问题,我有一个这样的结构。

public class Main {
    static final Logger logger = (Logger) LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        logger.debug("Start");

        MyObject1 loggingElement = new MyObject1();
        loggingElement.logg();

        logger.debug("End");
    }
}


public class MyObject1 {

    public MyObject2 obj;
    static final Logger logger = (Logger) LoggerFactory.getLogger(MyObject1.class);

    public MyObject1() {
        obj = new MyObject2();
    }
    public void logg() {
        obj.loggError();
    }
}
public class MyObject2 {
    static final Logger logger = (Logger) LoggerFactory.getLogger(MyObject2.class);

    public void loggError() {
        logger.error("Error info", new Throwable("Error"));
    }
}

和配置xml是这样的

<property name="mask" 
            value="MyObject2"/>


<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss} | %level | %-4thread | %-21logger | %m%n
        </pattern>
    </encoder>
</appender>

<root level="${root.level:-TRACE}">
    <appender-ref ref="STDOUT" />
</root>

当我运行主方法时,我得到这样的输出。

12:29:35 | DEBUG | main | com.logging.Main      | Start
12:29:35 | ERROR | main | com.logging.MyObject2 | Error info
java.lang.Throwable: Error
    at com.logging.MyObject2.loggError(MyObject2.java:11) [bin/:na]
    at com.logging.MyObject1.logg(MyObject1.java:17) [bin/:na]
    at com.logging.Main.main(Main.java:14) [bin/:na]
12:29:35 | DEBUG | main | com.logging.Main      | End

我想删除带有 "MyObject1 "的行,其余的堆栈跟踪就像这个例子一样,不做任何处理。http:/java.dzone.comarticlesfiltering-stack-trace-hell。

我试图改变logback的配置

<pattern>%d{HH:mm:ss} | %level | %-4thread | %-21logger | %m%n%ex{full,${mask}}
</pattern>

毫无作用

<pattern>%d{HH:mm:ss} | %level | %-4thread | %-21logger | %m%n%eXe{full,${mask}}
            </pattern>

移除整个堆栈跟踪(对我来说不是解决方案)

有谁知道有什么可以帮助我的吗?

java stack-trace logback
2个回答
6
投票

这个功能已经被 包括在1.1.3版本的Logback Classic中。. 它似乎适用于PatternLayout的以下转换词。


0
投票

在我的案例中,我用了一个 ThrowableConverter 的堆栈跟踪。

你可以把它添加到你的logback.xml中,也就是你的consoleApender的编码器里面。

    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">

            <!-- your other encoder configurations -->

            <stackTrace>
                <fieldName>stacktrace</fieldName>
                <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
                    <pattern>[%thread] - %msg%n%stack{1,1024,10,rootFirst}</pattern>
                </throwableConverter>
            </stackTrace>

        </encoder>
    </appender>

它将添加一个字段名 "stack_trace" 与堆栈跟踪。它为我做了这项工作。

在堆栈中,你有一些参数。

  • maxDepthPerThrowable: 限制每个可投掷的堆栈跟踪元素的数量。
  • 最大长度: 限制跟踪的总长度,以字符为单位。
  • 缩短类名长度: 缩略语 shortenedClassName
  • 根本原因第一: 按 "正常 "顺序(根本原因--最后)或根本原因--第一顺序输出。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.