Logback 在 ECP 工程中的SiftingAppender使用指导

617人浏览 / 0人评论

摘要:在 (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

 

 

全部评论