package de.pbauerochse.worklogviewer.logging;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.util.LinkedList;
/**
* @author Patrick Bauerochse
* @since 02.07.15
*/
public class LimitedLogMessageBuilder implements LogMessageListener {
private static final int INITIAL_SIZE = 5000;
private LinkedList<String> logMessages;
private StringBuilder logMessageCache;
private int maxLogLines;
public LimitedLogMessageBuilder() {
this(INITIAL_SIZE);
}
public LimitedLogMessageBuilder(int maxLogLines) {
this.maxLogLines = Math.max(maxLogLines, 1);
this.logMessages = new LinkedList<>();
this.logMessageCache = new StringBuilder(this.maxLogLines * 150);
}
@Override
public void onLogMessage(String formattedLogMessage, ILoggingEvent originalEvent) {
logMessages.add(formattedLogMessage);
logMessageCache.append(formattedLogMessage);
while (logMessages.size() > maxLogLines) {
String popped = logMessages.pop();
int index = logMessageCache.indexOf(popped);
logMessageCache.delete(index, index + popped.length());
}
}
public String getAllMessages() {
return logMessageCache.toString();
}
public int getMaxLogLines() {
return maxLogLines;
}
public void setMaxLogLines(int maxLogLines) {
this.maxLogLines = maxLogLines;
}
private class LogMessageIndizes {
private int start;
private int end;
public LogMessageIndizes(int start, int end) {
this.start = start;
this.end = end;
}
public int getStart() {
return start;
}
public int getEnd() {
return end;
}
}
}