SLF4J – Logback: How to configure loggers in runtime?

You should configure Logback programmatically as described in this example. public class Main { public static void main(String[] args) { Logger logger = (Logger) LoggerFactory.getLogger(“abc.xyz”); LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); FileAppender<LoggingEvent> fileAppender = (FileAppender<LoggingEvent>) logger.getAppender(“file”); if(fileAppender != null) { fileAppender.stop(); fileAppender.setFile(“new.log”); PatternLayout pl = new PatternLayout(); pl.setPattern(“%d %5p %t [%c:%L] %m%n)”); pl.setContext(lc); pl.start(); fileAppender.setLayout(pl); fileAppender.setContext(lc); … Read more

Logback – set log file name programmatically

I believe the following to be closer to what you want. import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.core.FileAppender; import ch.qos.logback.core.util.StatusPrinter; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; public class Main { public static void main(String[] args) { LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); FileAppender fileAppender = new FileAppender(); fileAppender.setContext(loggerContext); fileAppender.setName(“timestamp”); // set the file name fileAppender.setFile(“log/” + System.currentTimeMillis()+”.log”); PatternLayoutEncoder encoder … Read more

Logback – set log file name programmatically

I believe the following to be closer to what you want. import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.core.FileAppender; import ch.qos.logback.core.util.StatusPrinter; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; public class Main { public static void main(String[] args) { LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); FileAppender fileAppender = new FileAppender(); fileAppender.setContext(loggerContext); fileAppender.setName(“timestamp”); // set the file name fileAppender.setFile(“log/” + System.currentTimeMillis()+”.log”); PatternLayoutEncoder encoder … Read more

How to exclude commons-logging from a scala/sbt/slf4j project?

Heiko’s approach will probably work, but will lead to none of the dependencies of the 3rd party lib to be downloaded. If you only want to exclude a specific one use exclude. libraryDependencies += “foo” % “bar” % “0.7.0” exclude(“org.baz”, “bam”) or … excludeAll( ExclusionRule(organization = “org.baz”) ) // does not work with generated poms!

NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder

You have included a dependency on the SLF4J API, which is what you use in your application for logging, but you must also include an implementation that does the real logging work. For example to log through Log4J you would add this dependency: <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.2</version> </dependency> The recommended implementation would be logback-classic, which … Read more

What is the best way to unit-test SLF4J log messages?

Create a test rule: import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.read.ListAppender; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; import org.slf4j.LoggerFactory; import java.util.List; import java.util.stream.Collectors; public class LoggerRule implements TestRule { private final ListAppender<ILoggingEvent> listAppender = new ListAppender<>(); private final Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); @Override public Statement apply(Statement base, Description description) { return new Statement() { @Override … Read more