package net.unit8.waitt.feature.tracer; import java.util.Map; import java.util.logging.Logger; import net.unit8.waitt.api.ConfigurableFeature; import net.unit8.waitt.api.LogListener; import net.unit8.waitt.api.configuration.Feature; import net.unit8.waitt.api.configuration.WebappConfiguration; import net.unit8.waitt.feature.tracer.entry.ExceptionLogEntry; /** * @author kawasima */ public class ExceptionCollector implements LogListener, ConfigurableFeature { private static final Logger LOG = Logger.getLogger(ExceptionCollector.class.getName()); private ESClient esClient; @Override public void config(WebappConfiguration config) { String baseUrl = null; for (Feature feature : config.getFeatures()) { if ("waitt-tracer".equals(feature.getArtifactId()) && "net.unit8.waitt.feature".equals(feature.getGroupId())) { Map<String, String> featureConfig = feature.getConfiguration(); if (featureConfig != null) { baseUrl = featureConfig.get("elasticsearch.url"); } } } if (baseUrl == null) { baseUrl = "http://localhost:9200"; } esClient = new ESClient(baseUrl); LOG.info("setup ESClient for " + baseUrl); } @Override public void info(CharSequence message, Throwable t) { } @Override public void debug(CharSequence message, Throwable t) { } @Override public void warn(CharSequence message, Throwable t) { } @Override public void error(CharSequence message, Throwable t) { if (t != null) { esClient.post("/waitt/exception/", new ExceptionLogEntry(message.toString(), t.getStackTrace())); } } }