Is it possible to somehow intercept the logging (SLF4J + logback) and get an InputStream
(or something else that is readable) via a JUnit test case...?
I would recommend a simple, reusable spy implementation that can be included in a test as JUnit rule:
public final class LogSpy extends ExternalResource {
private Logger logger;
private ListAppender appender;
@Override
protected void before() {
appender = new ListAppender<>();
logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); // cast from facade (SLF4J) to implementation class (logback)
logger.addAppender(appender);
appender.start();
}
@Override
protected void after() {
logger.detachAppender(appender);
}
public List getEvents() {
if (appender == null) {
throw new UnexpectedTestError("LogSpy needs to be annotated with @Rule");
}
return appender.list;
}
}
In your test, you'd activate the spy in the following way:
@Rule
public LogSpy log = new LogSpy();
Call log.getEvents()
(or other, custom methods) to check the logged events.