package net.varkhan.base.management.logging;
import net.varkhan.base.management.metric.Time;
public class SimpleLogResolver<T> implements LogResolver<T> {
private final LogWriter<T> wrt;
private final LogConfig cfg;
private final Time tmr;
/**
* Create a simple logger.
*
* @param wrt a log writer
* @param cfg a log configuration
* @param tmr a log timer
*/
public SimpleLogResolver(LogWriter<T> wrt, LogConfig cfg, Time tmr) {
this.wrt=wrt;
this.cfg=cfg;
this.tmr=tmr;
}
public Logger<T> getLogger(String ctx, String key) {
return new SimpleLogger<T>(ctx, key, this);
}
public void log(String ctx, String key, int lev, T msg) {
if(cfg.isLevelEnabled(ctx, key, lev)) wrt.log(ctx, key, lev, tmr.time(), msg);
}
public void log(String ctx, String key, int lev, double val, T msg) {
if(cfg.isLevelEnabled(ctx, key, lev)) wrt.log(ctx, key, lev, tmr.time(), val, msg);
}
public long getLevelMask(String ctx, String key) {
return cfg.getLevelMask(ctx, key);
}
public boolean isLevelEnabled(String ctx, String key, int lev) {
return cfg.isLevelEnabled(ctx, key, lev);
}
public Iterable<String> contexts() {
return cfg.contexts();
}
public Iterable<Level> levels(String ctx) {
return cfg.levels(ctx);
}
public static class SimpleLogger<T> implements Logger<T> {
private final String ctx;
private final String key;
private final LogResolver<T> lgr;
/**
* Create a simple log, linked to a logger.
*
* @param ctx the logging context
* @param key the logging key
* @param lgr the logger
*/
public SimpleLogger(String ctx, String key, LogResolver<T> lgr) {
this.ctx=ctx;
this.key=key;
this.lgr=lgr;
}
public String getContext() { return ctx; }
public String getKey() { return key; }
public long getLevelMask() { return lgr.getLevelMask(ctx, key); }
public boolean isLevelEnabled(int lev) { return lgr.isLevelEnabled(ctx, key, lev); }
public void log(int lev, T msg) { lgr.log(ctx, key, lev, msg); }
public void log(int lev, double val, T msg) { lgr.log(ctx, key, lev, val, msg); }
}
}