package ch.sla.jdbcperflogger.logger;
import java.util.concurrent.LinkedBlockingDeque;
import org.eclipse.jdt.annotation.Nullable;
import ch.sla.jdbcperflogger.model.LogMessage;
public class RecordingLogSender implements LogSender {
private static final int DEFAULT_RETAINED_LOG_MESSAGES_COUNT = 50;
private final LinkedBlockingDeque<LogMessage> queue;
public RecordingLogSender() {
this(DEFAULT_RETAINED_LOG_MESSAGES_COUNT);
}
public RecordingLogSender(final int retainedLogMessagesCount) {
queue = new LinkedBlockingDeque<LogMessage>(retainedLogMessagesCount);
}
@Override
public void postLog(final LogMessage log) {
while (!queue.offerFirst(log)) {
queue.pollLast();
}
}
public LogMessage[] getRecordedLogMessages() {
return queue.toArray(new LogMessage[0]);
}
public void clearLogs() {
queue.clear();
}
public @Nullable LogMessage lastLogMessage(final int index) {
final LogMessage[] logs = getRecordedLogMessages();
if (logs.length <= index) {
return null;
}
return logs[index];
}
}