Spring Boot 3中排除Micrometer追踪:两种实现方式如何选择?
Spring Boot 3中排除Micrometer追踪的正确实现方式
问题背景
在Spring Boot 3中尝试排除特定观测项的Micrometer追踪,现有两段功能相近的代码实现,需选择正确方式:
代码片段1
@Bean ObservationRegistryCustomizer<ObservationRegistry> skipSecuritySpansFromObservation() { return (registry) -> registry.observationConfig().observationPredicate((name, context) -> !name.startsWith("spring.security")); }
代码片段2
@Bean ObservationPredicate skipSpringSecurityObservationPredicate() { return (name, context) -> !name.startsWith("spring.security."); }
实现分析与选择建议
框架适配性
代码片段2直接注册ObservationPredicate类型的Bean,是Spring Boot 3中配置观测项过滤的推荐方式。Spring Boot的自动配置机制会自动检测并将该Bean注入到ObservationRegistry的配置中,无需手动修改注册表,代码更简洁且符合框架设计规范。
代码片段1通过ObservationRegistryCustomizer手动修改注册表配置,虽能实现功能,但属于更底层的自定义方式,不如片段2直观简洁。匹配精度
片段1的规则!name.startsWith("spring.security")会排除所有名称以spring.security开头的观测项,可能误排除命名不规范的无关项;片段2的!name.startsWith("spring.security.")仅过滤标准Spring Security观测项(如spring.security.authentication),匹配更精准。
综上,代码片段2是更合适的实现方式,既契合Spring Boot自动配置风格,又能精准过滤目标观测项。
内容的提问来源于stack exchange,提问作者kishore purushothaman
相关产品推荐
相关产品推荐

