Logback - SiftingAppender 日志打印
之前做项目需要按照相关不同的业务打印到不同的文件目录中去。在logback-spring.xml中增加了相关配置
SiftingAppender 能根据一定的规则鉴别日志事件,然后委托给不同的appender完成真正的日志输出任务。
<!-- 鉴别日志事件--> <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"> <!--discriminator鉴别器 在该类中LogBasedDiscriminator实现相关规则-> <discriminator class="***.LogBasedDiscriminator"/> <sift> <!--配置日志文件(File)--> <appender name="LOG-FILE-${loggerName}" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--设置格式--> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/%d{yyyyMMdd}/${LOG_NAME}-%i.log</FileNamePattern> <!-- 单文件大小 --> <maxFileSize>100MB</maxFileSize> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> </appender> </sift> </appender>
关于 Discriminator :不指定具体class时,默认使用
MDCBasedDiscriminator
public class LogBasedDiscriminator implements Discriminator<ILoggingEvent> { private boolean started; private static final String KEY = "LOG_NAME"; private String defaultValue = "test"; @Override public String getDiscriminatingValue(ILoggingEvent iLoggingEvent) { //相关业务逻辑返回值return defaultValue; } @Override public String getKey() { return KEY; } @Override public void start() { started = true; } @Override public void stop() { started = false; } @Override public boolean isStarted() { return started; } }
参考:https://www.jianshu.com/p/a33902d58530