Я пытаюсь настроить схему ведения журнала в приложении, чтобы показать счетчик потоков в Dropwizard.Когда я захожу в порт администратора на 8081, я вижу метрики, которые Dropwizard предоставляет для приложения.Например, в разделе «Датчики» вы можете увидеть jvm.memory.total.used вместе со значением.Я хотел бы настроить журналы slf4j, чтобы показать это в некоторых моих запросах.Так, например, мои запросы GET могут выглядеть примерно так:
@GET
@TIME
@Produces(MediaType.Application_JSON)
public List<String> getNames {
List<String> nameList = dao.getList();
log.info("Memory used: {}", /*the value for jvm.memory.total.used*/)
return nameList;
}
Однако я не смог найти много информации о показе метрик таким образом.Возможно ли это, и если да, то практично ли это делать?
ОБНОВЛЕНИЕ:
Мне удалось выставить метрики для состояний протектора в сервисе GET, так что теперь яэкспериментируя с попыткой получить результаты в отчете журнала.Вот мой код:
@Path("metrics")
@Produces(MediaType.APPLICATION_JSON)
public class GetStuff {
private static final Logger log = LoggerFactory.getLogger(GetStuff.class);
@GET
@Path("/metrics")
public MetricRegistry provideMetrics() {
MetricRegistry metrics = new MetricRegistry();
metrics.register("jvm.threads", new ThreadStatesGaugeSet());
log.info("JVM Thread Count: {}", metrics.getGauges().get("jvm.threads.count"));
return metrics;
}
}
Я подтвердил, что это возвращает метрики, поэтому сейчас я пытаюсь заставить оператор log работать правильно и распечатать значение этого датчика.Теперь моя главная проблема заключается в том, что в журнале печатается адрес значения в отображении getGauges вместо значения, связанного с ключом.Более конкретно, я получаю значения, подобные этому:
JVM Thread Count: com.codahale.metrics.jvm.ThreadStatesGaugeSet$2@129e489
Кто-нибудь знает, как я могу это исправить, чтобы я мог получить фактическое значение?
РЕДАКТИРОВАТЬ: я открыл другойвопрос, связанный с этим, здесь .