我正在使用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>
当我运行main方法时,我得到如下输出:
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'的行,并保留其余的堆栈跟踪,就像这个示例中的int一样: http://java.dzone.com/articles/filtering-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>
删除整个堆栈跟踪(对我来说不是解决方案)
任何人都知道任何有用的东西吗?
答案 0 :(得分:5)
此功能已included in Logback Classic as of version 1.1.3。它似乎适用于以下PatternLayout的转换字:
答案 1 :(得分:2)
就我而言,我使用了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” 。它为我完成了工作。
在内部堆栈中,您具有以下参数:
shortenedClassName