1 package net.sf.openrocket.logging;
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.EnumMap;
9 * A logger that buffers a specific number of log lines from every log
10 * level. This prevents a multitude of lower-level lines from purging
11 * away important higher-level messages. The method {@link #getLogs()}
12 * combines these logs into their original (natural) order. A log line
13 * is also inserted stating the number of log lines of the particular
14 * level that have been purged from the buffer.
16 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
18 public class LogLevelBufferLogger extends LogHelper {
20 private final EnumMap<LogLevel, BufferLogger> loggers =
21 new EnumMap<LogLevel, BufferLogger>(LogLevel.class);
24 public LogLevelBufferLogger(int count) {
25 for (LogLevel level: LogLevel.values()) {
26 loggers.put(level, new BufferLogger(count));
31 public void log(LogLine line) {
32 // Delegate to the buffered logger of this level
33 loggers.get(line.getLevel()).log(line);
37 public List<LogLine> getLogs() {
38 List<LogLine> result = new ArrayList<LogLine>();
40 for (LogLevel level: LogLevel.values()) {
41 BufferLogger logger = loggers.get(level);
42 List<LogLine> logs = logger.getLogs();
43 int misses = logger.getOverwriteCount();
47 result.add(new LogLine(level, 0, new TraceException(),
48 "--- "+misses+" " + level + " lines removed but log is empty! ---",
51 result.add(new LogLine(level, logs.get(0).getLogCount(), new TraceException(),
52 "--- "+misses+" " + level + " lines removed ---", null));
58 Collections.sort(result);