以编程方式配置日志返回追加器

2022-08-31 12:14:56

我在logback中定义了一个logback追加器.xml,它是一个数据库追加器,但我很好奇是否有任何方法可以使用我自己的连接池(定义为bean)在java中配置追加器。

我发现类似的东西,但从来没有实际的答案。


答案 1

这里有一个适合我的简单示例(请注意,我在此示例中使用了FileAppender)

import org.slf4j.LoggerFactory;

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;

public class Loggerutils {

    public static void main(String[] args) {
          Logger foo = createLoggerFor("foo", "foo.log");
          Logger bar = createLoggerFor("bar", "bar.log");
          foo.info("test");
          bar.info("bar");
    }

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

          ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
          ple.setContext(lc);
          ple.start();
          FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
          fileAppender.setFile(file);
          fileAppender.setEncoder(ple);
          fileAppender.setContext(lc);
          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;
    }

}

答案 2

可以通过编程方式配置追加器。几乎所有追加器都使用编程配置进行测试。因此,在 logback 项目源代码中有许多编程追加器配置的示例。对于 logback-core 追加器,请查看 下,对于 logback-classic 追加器,请查看 下。logback-core/src/test/javalogback-classic/src/test/java


推荐