Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Logback-将多个级别记录到一个文件中_Java_Logging_Logback - Fatal编程技术网

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

Java Logback-将多个级别记录到一个文件中,java,logging,logback,Java,Logging,Logback,我需要创建一个只记录跟踪和调试事件的文件,但我无法让它工作,我不知道这是否可行 已尝试搜索反转阈值过滤器的选项或在LevelFilter上指定多个级别的方法,但未成功 我想实现这一点的唯一方法是创建2个appende,从一个到另一个完全相同,但其中一个指定LevelFilter用于跟踪,另一个指定用于调试 有没有其他方法可以做到这一点?因为我不太喜欢复制代码/配置。简单的方法可能是创建自定义过滤器,如下所示 public class CustomFilter extends Filter<

我需要创建一个只记录跟踪和调试事件的文件,但我无法让它工作,我不知道这是否可行

已尝试搜索反转阈值过滤器的选项或在LevelFilter上指定多个级别的方法,但未成功

我想实现这一点的唯一方法是创建2个appende,从一个到另一个完全相同,但其中一个指定LevelFilter用于跟踪,另一个指定用于调试


有没有其他方法可以做到这一点?因为我不太喜欢复制代码/配置。

简单的方法可能是创建自定义过滤器,如下所示

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>