Read the application log when testing your Spring application

From time to time I need to check so that a function correctly logs error messages to the application log. Here is one solution using Logback in a Spring application

01import ch.qos.logback.classic.Logger;
02import ch.qos.logback.classic.spi.LoggingEvent;
03import ch.qos.logback.core.Appender;
04 
05import org.mockito.ArgumentMatcher;
06 
07import org.slf4j.LoggerFactory;
08 
09import static org.mockito.Mockito.mock;
10import static org.mockito.Mockito.verify;
11 
12@Test
13public void shouldWriteErrorMessageToLog() {
14  Logger l = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
15  Appender mockAppender = mock(Appender.class);
16  l.addAppender(mockAppender);
17 
18  /*
19   * Call function that is expected to write to the application log
20   */
21 
22  verify(mockAppender).doAppend(argThat(new ArgumentMatcher() {
23    @Override
24    public boolean matches(final Object argument) {
25      return ((LoggingEvent)argument).getMessage().contains("FooBar");
26    }
27  }));
28}

Tested with Spring Boot v2.2.4 and TestNG v6.11

Comments are closed.