package de.otto.edison.metrics.configuration;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Slf4jReporter;
import com.ryantenney.metrics.spring.config.annotation.EnableMetrics;
import com.ryantenney.metrics.spring.config.annotation.MetricsConfigurerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import static com.codahale.metrics.Slf4jReporter.LoggingLevel.INFO;
import static java.util.concurrent.TimeUnit.MINUTES;
import static org.slf4j.LoggerFactory.getLogger;
@Configuration
@EnableMetrics
@EnableConfigurationProperties(MetricsProperties.class)
@ConditionalOnProperty(name = "edison.metrics.slf4j.logger")
public class Slf4JReporterConfiguration extends MetricsConfigurerAdapter {
private final MetricsProperties.Slf4j slf4jProperties;
@Autowired
public Slf4JReporterConfiguration(final MetricsProperties metricsProperties) {
this.slf4jProperties = metricsProperties.getSlf4j();
}
@Override
public void configureReporters(final MetricRegistry metricRegistry) {
Slf4jReporter
.forRegistry(metricRegistry)
.outputTo(getLogger(slf4jProperties.getLogger()))
.withLoggingLevel(INFO)
.build()
.start(slf4jProperties.getPeriod(), MINUTES);
}
}