Skip to content

Instantly share code, notes, and snippets.

@mokies
Last active August 29, 2015 14:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mokies/0037f6e6c4c11fce0bd1 to your computer and use it in GitHub Desktop.
Save mokies/0037f6e6c4c11fce0bd1 to your computer and use it in GitHub Desktop.
Logging Spy
package es.moki;
import com.google.common.collect.Lists;
import org.apache.log4j.Appender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
import org.mockito.ArgumentCaptor;
import java.util.List;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
public class LoggingSpy {
private Appender appenderMock = mock(Appender.class);
private Level originalLevel;
private Logger logger;
public LoggingSpy(Class loggedClass, Level logLevelToObserve) {
logger = Logger.getLogger(loggedClass);
originalLevel = logger.getLevel();
logger.addAppender(appenderMock);
logger.setLevel(logLevelToObserve);
}
public String observedMessage() {
ArgumentCaptor<LoggingEvent> loggingEventCaptor = ArgumentCaptor.forClass(LoggingEvent.class);
verify(appenderMock).doAppend(loggingEventCaptor.capture());
return loggingEventCaptor.getValue().getMessage().toString();
}
public List<String> observedMessages(int numExpectedMessages) {
ArgumentCaptor<LoggingEvent> loggingEventCaptor = ArgumentCaptor.forClass(LoggingEvent.class);
verify(appenderMock, times(numExpectedMessages)).doAppend(loggingEventCaptor.capture());
List<String> messages = Lists.newArrayList();
for (LoggingEvent loggingEvent : loggingEventCaptor.getAllValues()) {
messages.add(loggingEvent.getMessage().toString());
}
return messages;
}
public Throwable observedThrowable() {
ArgumentCaptor<LoggingEvent> loggingEventCaptor = ArgumentCaptor.forClass(LoggingEvent.class);
verify(appenderMock).doAppend(loggingEventCaptor.capture());
return loggingEventCaptor.getValue().getThrowableInformation().getThrowable();
}
public void restoreLogLevel() {
logger.setLevel(originalLevel);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment