Logback SiftingAppender使用指导

摘要:在 (ECP)工程中使用Logback的SiftingAppender可以帮助实现日志的分流和分离,使每个线程日志可以被独立记录和管理。下面是一些使用SiftingAppender的指导: 

一、配置SiftingAppender

配置SiftingAppender:在Logback的配置文件中,添加SiftingAppender的配置,指定它作为根Logger的一个Appender。

 

<!--    自定义筛选器类-->
<appender name="MY_SIFTING" class="ch.qos.logback.classic.sift.SiftingAppender">
    <discriminator class="cn.histo.common.config.LoggerNameBasedDiscriminator">
        <defaultValue>my_general</defaultValue>
    </discriminator>
    <sift>
        <appender name="FILE-${loggerName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>target/log/${loggerName}.%d{yyyyMMddHHmm}-%i.log</fileNamePattern>
                <maxHistory>60</maxHistory>
                <maxFileSize>300KB</maxFileSize>
            </rollingPolicy>
            <encoder>
                <pattern>%msg%n</pattern>
            </encoder>
        </appender>
    </sift>
</appender>
<root level="INFO">
    <appender-ref ref="MY_SIFTING"/>
</root>

 

二、配置 discriminator 

<sift>元素中,我们配置了一个名为"FILE"的FileAppender,用于将日志写入到对应用户的日志文件中。${loggerName}是日志名称标识的占位符,每个日志记录器的名称将被记录到以其标识命名的日志文件中。以下是详细的 discriminator

package cn.histo.common.config;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.sift.AbstractDiscriminator;

public class LoggerNameBasedDiscriminator extends AbstractDiscriminator<ILoggingEvent> {
    private static final String KEY = "loggerName";
    private String defaultValue;

    public String getDefaultValue() {
        return defaultValue;
    }

    public void setDefaultValue(String defaultValue) {
        this.defaultValue = defaultValue;
    }
    @Override
    public String getKey() {
        return KEY;
    }

    public void setKey() {
        throw new UnsupportedOperationException("Key not settable. Using " + KEY);
    }

    @Override
    public String getDiscriminatingValue(ILoggingEvent e) {
        String loggerName = e.getLoggerName();

        if (loggerName == null) {
            return defaultValue;
        }

        return loggerName;
    }
}

 


 

结果展示

以上是使用SiftingAppender 根据 日志记录器的名称实现多文件记录日志, 实现日志分流和分离的一个示例。请根据具体场景和需求自定义配置SiftingAppender

posted @ 2023-07-10 13:24  Verite  阅读(1007)  评论(0)    收藏  举报