
I've just started to set up an environment with logback, but found examples for programmatically configuring logback limited, or a mix of solutions for a number of different logger interfaces. As such I hope that the code below helps someone in the future as an example. It may not be the best code on the planet but what it demos is - Select the root logger so that the configuration becomes the default. - Sets up a RollingFileAppender - Sets up a FixedWindowRollingPolicy - Sets up a SizeBasedTriggeringPolicy - Sets up a PatternLayoutEncoder To be honest I'm not at the point of fully understanding all the steps so can't provide full docs for the example (yet). package org.utils; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.rolling.FixedWindowRollingPolicy; import ch.qos.logback.core.rolling.RollingFileAppender; import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy; import ch.qos.logback.core.util.StatusPrinter; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import org.slf4j.LoggerFactory; public class setupLogging { public static void logbackInit() { Logger rootLogger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); LoggerContext loggerContext = rootLogger.getLoggerContext(); loggerContext.reset(); RollingFileAppender<ILoggingEvent> rfAppender = new RollingFileAppender<ILoggingEvent>(); rfAppender.setContext(loggerContext); rfAppender.setFile("log output.log"); FixedWindowRollingPolicy fwRollingPolicy = new FixedWindowRollingPolicy(); fwRollingPolicy.setContext(loggerContext); fwRollingPolicy.setFileNamePattern("log output-%i.log.zip"); fwRollingPolicy.setParent(rfAppender); fwRollingPolicy.start(); SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<ILoggingEvent>(); triggeringPolicy.setMaxFileSize("5MB"); triggeringPolicy.start(); PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setContext(loggerContext); encoder.setPattern("%-4relative [%thread] %-5level %logger{35} - %msg%n"); encoder.start(); rfAppender.setEncoder(encoder); rfAppender.setRollingPolicy(fwRollingPolicy); rfAppender.setTriggeringPolicy(triggeringPolicy); rfAppender.start(); rootLogger.addAppender(rfAppender); // generate some output StatusPrinter.print(loggerContext); rootLogger.debug("hello tt"); } }