//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.core.logging.builders;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import com.google.common.collect.EvictingQueue;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;
import uk.gov.dstl.baleen.core.logging.RecentLog;
/**
* Collects a limited number of log events in memory.
*
*
*
* @param <Event>
* (will likely always be ILogEvent)
*/
public class EvictingQueueAppender<E extends ILoggingEvent> extends AppenderBase<E> {
public static final int DEFAULT_MAX_SIZE = 1000;
private final Queue<RecentLog> events;
private int maxSize;
/**
* New instance.
*
*/
public EvictingQueueAppender(int maxSize) {
this.maxSize = maxSize < 0 ? 0 : maxSize;
events = EvictingQueue.create(this.maxSize);
}
@Override
public synchronized void append(E event) {
events.add(new RecentLog(event));
}
/**
* The maximum number of logs to store..
*
* @return the max size
*/
public int getMaxSize() {
return maxSize;
}
/**
* Clear the events.
*
*/
public void clear() {
events.clear();
}
/**
* Get all events (contains a copy of the current buffer).
*
* @return
*/
public List<RecentLog> getAll() {
return new ArrayList<RecentLog>(events);
}
/**
* Get the number of current events stored.
*
* @return
*/
public int size() {
return events.size();
}
}