Skip to content

Instantly share code, notes, and snippets.

@jaykhimani
Last active December 31, 2022 23:29
Show Gist options
  • Save jaykhimani/b12243e94a883e9470d706edd90b26ac to your computer and use it in GitHub Desktop.
Save jaykhimani/b12243e94a883e9470d706edd90b26ac to your computer and use it in GitHub Desktop.
JUnit 5 Extension To Verify logging
package com.jak.sandbox;
import java.util.List;
import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.read.ListAppender;
public class LoggerExtension implements BeforeEachCallback, AfterEachCallback {
private Logger logger;
private ListAppender<ILoggingEvent> appender;
private String loggerName;
private Level level;
public LoggerExtension() {
this(Level.ALL, Logger.ROOT_LOGGER_NAME);
}
public LoggerExtension(Class<?> loggerClass) {
this(Level.ALL, loggerClass.getCanonicalName());
}
public LoggerExtension(Level level, Class<?> loggerClass) {
this(level, loggerClass.getCanonicalName());
}
public LoggerExtension(Level level, String loggerName) {
this.loggerName = loggerName;
this.level = level;
}
@Override
public void beforeEach(ExtensionContext context) {
appender = new ListAppender<>();
logger = (Logger) LoggerFactory.getLogger(loggerName);
logger.addAppender(appender);
logger.setLevel(level);
appender.start();
}
@Override
public void afterEach(ExtensionContext context) {
logger.detachAppender(appender);
}
public List<ILoggingEvent> getEvents() {
if (appender == null) {
throw new RuntimeException("LoggerExtension needs to be annotated with @RegisterExtension");
}
return appender.list;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment