首页 > 解决方案 > 在 Spring 下使用 Java 而不是 XML 配置 Logback

问题描述

在 Spring[Boot] 下,如何使用 JavaConfig 或某种基于 Annotation 的配置以编程方式配置 Logback。 我希望尽可能避免使用 XML 文件

欢迎举例

我不是在寻找指向以下内容的链接。我已经有了这些。假设我有这些,我的问题是如何达到这个问题的目标。 How to configure Lockback in Java when NOT under Spring How to set up Logback under Spring or Spring Boot using XML

标签: javaspringlogbackspring-logback

解决方案


是的。如果您想以编程方式配置,这是可能的。例如,下面的代码对我有用:

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.FileAppender;
import org.slf4j.LoggerFactory;

public class LoggerUtil {
  public static void main(String[] args) {
    Logger example1 = createLoggerFor("example1", "example1.log");
    Logger example2 = createLoggerFor("example2", "example2.log");
    example1.info("test-example1");
    example2.info("test-example2");
  }

  private static Logger createLoggerFor(String string, String file) {
    LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
    PatternLayoutEncoder patternLayoutEncoder = new PatternLayoutEncoder();

    patternLayoutEncoder.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
    patternLayoutEncoder.setContext(loggerContext);
    patternLayoutEncoder.start();
    FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
    fileAppender.setFile(file);
    fileAppender.setEncoder(patternLayoutEncoder);
    fileAppender.setContext(loggerContext);
    fileAppender.start();

    Logger logger = (Logger) LoggerFactory.getLogger(string);
    logger.addAppender(fileAppender);
    logger.setLevel(Level.DEBUG);
    logger.setAdditive(false); /* set to true if root should log too */

    return logger;
  }
}

推荐阅读