From bd6d30b81b8985387e353393f19385d3d5a37535 Mon Sep 17 00:00:00 2001 From: izeye Date: Tue, 12 Jan 2021 12:36:14 +0900 Subject: [PATCH] Make MetricsClientHttpRequestInterceptor defensive against metrics recoding failures --- .../client/MetricsClientHttpRequestInterceptor.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/client/MetricsClientHttpRequestInterceptor.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/client/MetricsClientHttpRequestInterceptor.java index e280b1e9d22c..20a880e0a116 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/client/MetricsClientHttpRequestInterceptor.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/client/MetricsClientHttpRequestInterceptor.java @@ -25,6 +25,8 @@ import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Timer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.boot.actuate.metrics.AutoTimer; import org.springframework.core.NamedThreadLocal; @@ -43,6 +45,8 @@ */ class MetricsClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { + private static final Log logger = LogFactory.getLog(MetricsClientHttpRequestInterceptor.class); + private static final ThreadLocal> urlTemplate = new UrlTemplateThreadLocal(); private final MeterRegistry meterRegistry; @@ -82,8 +86,13 @@ public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttp return response; } finally { - getTimeBuilder(request, response).register(this.meterRegistry).record(System.nanoTime() - startTime, - TimeUnit.NANOSECONDS); + try { + getTimeBuilder(request, response).register(this.meterRegistry).record(System.nanoTime() - startTime, + TimeUnit.NANOSECONDS); + } + catch (Exception ex) { + logger.info("Failed to record metrics.", ex); + } if (urlTemplate.get().isEmpty()) { urlTemplate.remove(); }