package de.flower.common.test.mock;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.AppenderBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* @author flowerrrr
*/
public class LogBackListAppender extends AppenderBase<ILoggingEvent> implements IListAppender<ILoggingEvent> {
private List<ILoggingEvent> list = new ArrayList<ILoggingEvent>();
public LogBackListAppender() {
}
public List<ILoggingEvent> getList() {
return list;
}
/**
* Clears the internal event list.
* Should be called before a new test method is invoked.
*/
public void reset() {
list.clear();
}
private boolean hasException(Class<Throwable> claz) {
for (ILoggingEvent event : getList()) {
IThrowableProxy throwableInformation = event.getThrowableProxy();
if (throwableInformation != null) {
String throwable = throwableInformation.getClassName();
if (throwable == claz.getCanonicalName()) {
return true;
}
}
}
return false;
}
private boolean hasMessage(String message) {
for (ILoggingEvent event : getList()) {
String logMessage = event.getFormattedMessage();
if (logMessage != null && (logMessage == message)) {
return true;
}
}
return false;
}
private String format(ILoggingEvent loggingEvent) {
throw new UnsupportedOperationException("Feature not implemented!");
}
protected void append(ILoggingEvent e) {
list.add(e);
}
public static IListAppender<ILoggingEvent> configureListAppender() {
IListAppender appender = new LogBackListAppender();
appender.start();
addAppender2Root(appender);
return appender;
}
public static void addAppender2Root(Appender<ILoggingEvent> appender) {
ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.addAppender(appender);
}
}