Logback - 如何让每个记录器记录到单独的日志文件中?

Amo*_*eba 6 logback

我的应用程序有很多EJB.当前定制的Logger实现创建了一个这样的记录器;

private static Logger logger = Logger.getInstance("SERVICE_NAME");

,日志记录将进入文件;

(路径)/SERVICE_NAME/SERVICE_NAME.log

我想用logback复制这种行为,但是在logback.xml配置中抓住'logger'名称时遇到了麻烦.它可以在log encoder.pattern中看到,即"%d%-5level%logger {35} - %msg%n".

有什么想法我怎么能把它变成属性/变量然后在元素中使用它?

Amo*_*eba 6

我有部分解决方案.如果我创建自己的Discriminator,我可以使用logback.xml中的Discriminator来实现每个EJB的seperate-log-files.

鉴别;

public class LoggerNameBasedDiscriminator implements Discriminator<ILoggingEvent> {

private static final String KEY = "loggerName";

private boolean started;

@Override
public String getDiscriminatingValue(ILoggingEvent iLoggingEvent) {
    return iLoggingEvent.getLoggerName();
}

@Override
public String getKey() {
    return KEY;
}

public void start() {
    started = true;
}

public void stop() {
    started = false;
}

public boolean isStarted() {
    return started;
}
Run Code Online (Sandbox Code Playgroud)

}

然后是我的logback.xml;

    <configuration debug="true" scan="true" scanPeriod="30 seconds">

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg</pattern>
    </encoder>
    </appender>

  <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
    <discriminator class="package.to.LoggerNameBasedDiscriminator"/>
     <sift>
      <appender name="FILE-${loggerName}" class="ch.qos.logback.core.FileAppender">
    <FILE>path/to/logs/${loggerName}/${loggerName}.log</FILE>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} %-50(%level %logger{35}) %msg%n</pattern>
     </encoder>
      </appender>
     </sift>
    </appender>

    <root level="debug">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="SIFT" />
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这个解决方案似乎有效,但现在我没有时间或大小的日志轮换!

  • 您可以在 SiftingAppender 中嵌套一个 RollingFileAppender。 (2认同)