package net.varkhan.base.management.logging; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; /** *<b>A log writer that dispatches log events according to key prefix.</b> * @param <T> */ public class LogDispatchContext<T> implements LogWriter<T> { private final LogWriter<T> def; private final ConcurrentMap<String,LogWriter<T>> dsp = new ConcurrentHashMap<String,LogWriter<T>>(); public LogDispatchContext(LogWriter<T> def) { this.def = def; } public LogDispatchContext(LogWriter<T> def, Map<String,LogWriter<T>> dsp) { this.def = def; this.dsp.putAll(dsp); } public void log(String ctx, String key, int lev, long tms, T msg) { LogWriter<T> wrt=this.dsp.get(ctx); if(wrt==null) wrt=this.def; if(wrt!=null) wrt.log(ctx, key, lev, tms, msg); } public void log(String ctx, String key, int lev, long tms, double val, T msg) { LogWriter<T> wrt=this.dsp.get(ctx); if(wrt==null) wrt=this.def; if(wrt!=null) wrt.log(ctx, key, lev, tms, val, msg); } public void log(LogEvent<T> evt) { LogWriter<T> wrt=this.dsp.get(evt.getContext()); if(wrt==null) wrt=this.def; if(wrt!=null) wrt.log(evt); } public void log(Iterable<LogEvent<T>> evts) { for(LogEvent<T> evt: evts) log(evt); } public void flush() { for(LogWriter<T> wrt: dsp.values()) wrt.flush(); } public void set(String ctx, LogWriter<T> wrt) { this.dsp.put(ctx,wrt); } public void del(String ctx) { this.dsp.remove(ctx); } }