package me.osm.gazetter; import org.apache.commons.lang3.StringUtils; 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.PatternLayout; import ch.qos.logback.classic.spi.Configurator; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.ConsoleAppender; import ch.qos.logback.core.FileAppender; import ch.qos.logback.core.encoder.LayoutWrappingEncoder; import ch.qos.logback.core.spi.ContextAwareBase; public class LogbackConfigurator extends ContextAwareBase implements Configurator { static String outFile; static String logPrefix = ""; static String level = "INFO"; static boolean muteConsole = false; @Override public void configure(LoggerContext lc) { String pattern = StringUtils.join(new String[]{ logPrefix, "%d{yyyy-MM-dd HH:mm:ss.SSS} %marker %-5level %logger{36} - %msg%n"}, ' '); Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME); if (!muteConsole) { ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<ILoggingEvent>(); ca.setContext(lc); ca.setName("console"); LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<ILoggingEvent>(); encoder.setContext(lc); PatternLayout layout = new PatternLayout(); layout.setPattern(pattern); layout.setContext(lc); layout.start(); encoder.setLayout(layout); ca.setEncoder(encoder); ca.start(); rootLogger.addAppender(ca); } if (outFile != null) { FileAppender<ILoggingEvent> fa = new FileAppender<>(); fa.setContext(lc); fa.setName("file"); LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<ILoggingEvent>(); encoder.setContext(lc); PatternLayout layout = new PatternLayout(); layout.setPattern(pattern); layout.setContext(lc); layout.start(); encoder.setLayout(layout); fa.setEncoder(encoder); fa.setFile(outFile); fa.start(); rootLogger.addAppender(fa); } rootLogger.setLevel(Level.valueOf(level)); } public static void configureStatic() { LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); new LogbackConfigurator().configure(lc); } }