package net.varkhan.base.management.logging.compat.log4j;
import net.varkhan.base.management.config.MapConfiguration;
import net.varkhan.base.management.config.PrefixKeyConfiguration;
import net.varkhan.base.management.config.SettableConfiguration;
import net.varkhan.base.management.logging.*;
import net.varkhan.base.management.metric.MilliTime;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 3/25/12
* @time 4:25 PM
*/
public class DefaultRepository implements LoggerRepository {
public final String ctx;
protected final SettableConfiguration config =new MapConfiguration();
public final LogMultiplexer<Throwable> writers =new LogMultiplexer<Throwable>();
public LogConfigProps logconf =new LogConfigProps(Level.levelStrings(), null, config);
private final LogResolver<Throwable> resolver=new SimpleLogResolver<Throwable>(
writers,
new LogConfigProps(Level.levelStrings(), new PrefixKeyConfiguration(config)),
new MilliTime()
);
private final ConcurrentMap<String,Log> loggers =new ConcurrentHashMap<String,Log>();
public DefaultRepository(String ctx) {
this.ctx=ctx;
}
public Log getLogger(String name) {
Log logger=loggers.get(name);
if(logger!=null) return logger;
logger=new Log(resolver.getLogger(ctx, name));
if(loggers.putIfAbsent(name, logger)==null) return logger;
return loggers.get(name);
}
public void addWriter(LogWriter<Throwable>... mtx) { writers.add(mtx); }
public void setLevelMask(String ctx, String key, long lvm) { logconf.setLevelMask(ctx, key, lvm); }
public void loadConfig(LogConfig cfg) { logconf.loadConfig(cfg); }
@SuppressWarnings("unchecked")
public void loadConfig(String ctx, Properties props) {
logconf.loadConfig(ctx, (Map) props);
}
}