Programmatically configure LogBack appender

前端 未结 5 686
死守一世寂寞
死守一世寂寞 2020-11-28 23:50

I have a logback appender defined in the logback.xml, it\'s a DB appender, but I\'m curious if there is any way to configure the appender in java using my own connection poo

5条回答
  •  借酒劲吻你
    2020-11-29 00:34

    Here a simple example that works for me (note that I use the FileAppender in this example)

    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 fileAppender = new FileAppender();
              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;
        }
    
    }
    

提交回复
热议问题