我需要创建一个只记录TRACE和DEBUG事件的文件,但我无法使其工作(不知道是否可能)。
已尝试搜索反转ThresholdFilter的选项或在LevelFilter上指定多个级别的方法,但没有成功。
我想要做这项工作的唯一方法是创建2个appende,从一个到另一个完全相同,但是LevelFilter在一个指定为TRACE而另一个指定为DEBUG。
还有其他方法可以实现吗?因为我不是重复代码/配置的忠实粉丝。
答案 0 :(得分:0)
简单的方法可能是创建自定义过滤器,如下所示。
public class CustomFilter extends Filter<ILoggingEvent> {
private String levels;
public String getLevels() {
return levels;
}
public void setLevels(String levels) {
this.levels = levels;
}
private Level[] level;
@Override
public FilterReply decide(ILoggingEvent arg0) {
if (level == null && levels != null) {
setLevels();
}
if (level != null) {
for (Level lev : level) {
if (lev == arg0.getLevel()) {
return FilterReply.ACCEPT;
}
}
}
return FilterReply.DENY;
}
private void setLevels() {
if (!levels.isEmpty()) {
level = new Level[levels.split("\\|").length];
int i = 0;
for (String str : levels.split("\\|")) {
level[i] = Level.valueOf(str);
i++;
}
}
}
}
在logback.xml中添加过滤器
<configuration>
<appender name="fileAppender1" class="ch.qos.logback.core.FileAppender">
<filter class="com.swasthik.kp.logback.filters.CustomFilter">
<levels>TRACE|DEBUG</levels>
</filter>
<file>c:/logs/kplogback.log</file>
<append>true</append>
<encoder>
<pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="TRACE">
<appender-ref ref="fileAppender1" />
</root>
</configuration>