Roh*_*tty 1 java spring-boot micrometer spring-micrometer
我有api端点:/ user / {tenant} / create
我正在使用带有测微计的Spring Boot 2进行度量。
默认情况下,Spring Boot 2端点的@Timer注释包含以下标记:exception,method,uri,status
我想将api参数“ tenant”的传递值添加为端点的额外标记
如何使用弹簧靴2和千分尺进行操作
@Bean
public WebMvcTagsProvider webMvcTagsProvider() {
return new CustomWebMvcTagsProvider();
}
Run Code Online (Sandbox Code Playgroud)
public class CustomWebMvcTagsProvider extends DefaultWebMvcTagsProvider {
public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response, Object handler, Throwable exception) {
return Tags.of(super.getTags(request, response, handler, exception)).and(getTenantTag(request));
}
private Tag getTenantTag(HttpServletRequest request) {
String tenant = ((Map<String, String>)request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE)).get("tenant");
if(tenant == null){
tenant = "na";
}
return Tag.of("tenant", tenant);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
从 Spring Boot 2.3.0 开始,如果您想在某些请求的默认标签上添加额外的标签,更好的方法是添加 WebMvcTagsContributor 类的 @Bean。这样您的代码就不必担心放入默认标签。
在https://github.com/spring-projects/spring-boot/issues/20175中实现
代码如下所示:
@Bean
public WebMvcTagsContributor webMvcTagsContributor() {
return new WebMvcTagsContributor() {
@Override
public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response, Object handler, Throwable exception) {
Tags tags = Tags.empty();
tags = tags.and(Tag.of("my_tag", "somevalue"));
return tags;
}
@Override
public Iterable<Tag> getLongRequestTags(HttpServletRequest request, Object handler) {
return null;
}
};
}
Run Code Online (Sandbox Code Playgroud)
使用custom WebMvcTagsProvider,例如:
@Bean
public WebMvcTagsProvider webMvcTagsProvider() {
return new WebMvcTagsProvider() {
@Override
public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response, Object handler, Throwable exception) {
return ((Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE))
.entrySet()
.stream()
.map(entry -> new ImmutableTag(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
}
@Override
public Iterable<Tag> getLongRequestTags(HttpServletRequest request, Object handler) {
return new ArrayList<>();
}
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |