Here is an example of JsonSl4jReporter
public class JsonSl4jReporter extends ScheduledReporter {
private static final Logger logger = LoggerFactory.getLogger(JsonSl4jReporter.class);
private final ObjectMapper mapper;
public static JsonSl4jReporter create(MetricRegistry registry) {
return new JsonSl4jReporter(registry, MetricFilter.ALL, TimeUnit.SECONDS, TimeUnit.MILLISECONDS);
}
private JsonSl4jReporter(MetricRegistry registry, MetricFilter filter, TimeUnit rateUnit, TimeUnit durationUnit) {
super(registry, "json-sl4j-reporter", filter, rateUnit, durationUnit);
// from metrics-json
MetricsModule metricsModule = new MetricsModule(rateUnit, durationUnit, false, filter);
// jackson mapper
mapper = new ObjectMapper().registerModule(metricsModule);
mapper.enable(SerializationFeature.INDENT_OUTPUT);
}
@Override
public void report(SortedMap<String, Gauge> gauges, SortedMap<String, Counter> counters, SortedMap<String, Histogram> histograms, SortedMap<String, Meter> meters, SortedMap<String, Timer> timers) {
log(gauges);
log(counters);
log(histograms);
log(meters);
log(timers);
}
private void log(Map<String, ?> data){
if(data.isEmpty()) return;
try {
String json = mapper.writeValueAsString(data);
logger.debug(json);
} catch (JsonProcessingException e) {
logger.error(e);
}
}
}
As you can see, you just have to configure the ObjectMapper
using MetricModul
from metrics-json