1 package net.sf.openrocket.logging;
5 import net.sf.openrocket.util.ArrayList;
8 * A logger implementation that delegates logging to other logger implementations.
9 * Multiple loggers can be added to the delegator, all of which will receive
10 * all of the log lines.
12 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
14 public class DelegatorLogger extends LogHelper {
17 * List of loggers. This list must not be modified, instead it should be
18 * replaced every time the list is changed.
20 private volatile ArrayList<LogHelper> loggers = new ArrayList<LogHelper>();
23 public void log(LogLine line) {
24 // Must create local reference for thread safety
25 List<LogHelper> list = loggers;
26 for (LogHelper l : list) {
33 * Add a logger from the delegation list.
34 * @param logger the logger to add.
36 public synchronized void addLogger(LogHelper logger) {
37 ArrayList<LogHelper> newList = loggers.clone();
39 this.loggers = newList;
43 * Remove a logger from the delegation list.
44 * @param logger the logger to be removed.
46 public synchronized void removeLogger(LogHelper logger) {
47 ArrayList<LogHelper> newList = loggers.clone();
48 newList.remove(logger);
49 this.loggers = newList;