package net.varkhan.base.management.logging;
import java.io.Flushable;
public class LogAppender<T> implements LogWriter<T> {
private final Appendable out;
private final String fmt;
public LogAppender(Appendable out) {
this(out, null);
}
public LogAppender(Appendable out, String fmt) {
this.out=out;
this.fmt=fmt;
}
public void log(String ctx, String key, int lev, long tms, T msg) {
log(ctx, key, lev, tms, 1.0, msg);
}
public void log(String ctx, String key, int lev, long tms, double val, T msg) {
try {
if(fmt==null) LogFormat.formatAsText(out, ctx, key, lev, tms, val, msg);
else LogFormat.format(out, fmt, ctx, key, lev, tms, val, msg);
}
catch(Throwable t) { /* ignore failing dispatches */ }
}
public void log(LogEvent<T> evt) {
log(evt.getContext(),evt.getKey(),evt.getLevel(),evt.getTimeStamp(),evt.getWeight(),evt.getContent());
}
public void log(Iterable<LogEvent<T>> evts) {
for(LogEvent<T> evt: evts) log(evt);
}
public void flush() {
if(out instanceof Flushable) try { ((Flushable)out).flush(); }
catch(Throwable t) { /* ignore failing dispatches */ }
}
}