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