1 package net.sf.openrocket.logging;
3 import java.util.EnumMap;
7 * A logger implementation that buffers specific levels of log lines.
8 * The levels that are logged are set using the method
9 * {@link #setStoreLevel(LogLevel, boolean)}. The stored LogLines can
10 * be obtained using {@link #getLogs()}.
12 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
14 public class BufferLogger extends LogHelper {
16 private final CyclicBuffer<LogLine> buffer;
17 private final EnumMap<LogLevel, Boolean> storeLevels =
18 new EnumMap<LogLevel, Boolean>(LogLevel.class);
22 * Create a buffered logger with that logs the specified number of log
23 * lines. By default all log levels are buffered.
25 * @param length the length of the buffer.
27 public BufferLogger(int length) {
28 for (LogLevel l: LogLevel.values()) {
29 storeLevels.put(l, true);
31 buffer = new CyclicBuffer<LogLine>(length);
36 public void log(LogLine line) {
37 if (storeLevels.get(line.getLevel())) {
43 * Set whether the specified log level is buffered.
45 * @param level the log level.
46 * @param store whether to store the level.
48 public void setStoreLevel(LogLevel level, boolean store) {
49 storeLevels.put(level, store);
53 * Get whether the specified log level is buffered.
55 * @param level the log level.
56 * @return whether the log level is stored.
58 public boolean getStoreLevel(LogLevel level) {
59 return storeLevels.get(level);
64 * Return all the buffered log lines.
66 * @return a list of all buffered log lines.
68 public List<LogLine> getLogs() {
69 return buffer.asList();
73 * Return the number of log lines that has been overwritten.
75 * @return the number of log lines missed.
77 public int getOverwriteCount() {
78 return buffer.getOverwriteCount();