Если он основан на потоке, выполняющем вызов, который ThreadLocal
может удерживать это состояние, MeterFilter
может проверить его, просто обязательно очистите ThreadLocal
, как только вы закончите с ним.
Похоже, вы пытаетесь установить дополнительные теги для http.server.request
metri c, верно? Это очень умно.
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
class MetricDecoratingFilter : OncePerRequestFilter(), MeterFilter {
private val additionalTags = ThreadLocal<Tags>()
override fun doFilterInternal(req: HttpServletRequest, resp: HttpServletResponse, chain: FilterChain) {
//add logic to compute the tags
additionalTags.set(Tags.of("app", "bob"))
chain.doFilter(req, resp)
additionalTags.remove()
}
override fun map(id: Meter.Id): Meter.Id {
return if (id.name.startsWith("http")) {
val moreTags = additionalTags.get()
id.withTags(moreTags)
} else id
}
}