Logback - 将多个级别记录到一个文件

时间:2014-08-13 14:39:04

标签: java logging logback

我需要创建一个只记录TRACE和DEBUG事件的文件,但我无法使其工作(不知道是否可能)。

已尝试搜索反转ThresholdFilter的选项或在LevelFilter上指定多个级别的方法,但没有成功。

我想要做这项工作的唯一方法是创建2个appende,从一个到另一个完全相同,但是LevelFilter在一个指定为TRACE而另一个指定为DEBUG。

还有其他方法可以实现吗?因为我不是重复代码/配置的忠实粉丝。

1 个答案:

答案 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>