You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot3中LoggingMeterRegistry配置及MetricFilter自定义问题

Spring Boot 3 中 LoggingMeterRegistry 的配置与指标过滤实现

1. 通过 application.yaml 配置 step 等参数

直接new LoggingMeterRegistry()不会自动读取配置文件属性,需要借助Spring Boot提供的LoggingProperties绑定配置,让Bean感知yaml中的参数:

步骤1:修改Bean定义,注入LoggingProperties

import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.logging.LoggingMeterRegistry;
import io.micrometer.core.instrument.logging.LoggingRegistryConfig;
import org.springframework.boot.actuate.autoconfigure.metrics.export.logging.LoggingProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MeterRegistryConfig {
    @Bean
    LoggingMeterRegistry loggingMeterRegistry(LoggingProperties loggingProperties) {
        LoggingRegistryConfig config = loggingProperties.getExport().getLogging();
        return new LoggingMeterRegistry(config, Clock.SYSTEM);
    }
}

步骤2:在 application.yaml 中配置参数

使用management.metrics.export.logging前缀配置相关属性:

management:
  metrics:
    export:
      logging:
        enabled: true
        step: 30s  # 指标输出间隔,默认值为1分钟(1m)
        log-level: INFO  # 日志输出级别,可选TRACE/DEBUG/INFO/WARN/ERROR
        descriptions: false  # 是否输出指标描述,默认false

2. 注册自定义 MetricFilter 过滤输出

你提到的com.codahale.metrics.MetricFilter是Dropwizard Metrics的API,而Micrometer自身使用io.micrometer.core.instrument.MeterFilter接口,需要先将Dropwizard的Filter适配为Micrometer的Filter,再添加到LoggingMeterRegistry中:

示例代码:适配Dropwizard MetricFilter并注册

import com.codahale.metrics.MetricFilter;
import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.MeterFilter;
import io.micrometer.core.instrument.logging.LoggingMeterRegistry;
import io.micrometer.core.instrument.logging.LoggingRegistryConfig;
import org.springframework.boot.actuate.autoconfigure.metrics.export.logging.LoggingProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Collections;

@Configuration
public class MeterRegistryConfig {
    @Bean
    LoggingMeterRegistry loggingMeterRegistry(LoggingProperties loggingProperties) {
        // 自定义Dropwizard MetricFilter:仅保留名称包含"http"的指标
        MetricFilter dropwizardFilter = (metricName, metric) -> metricName.contains("http");

        // 将Dropwizard Filter适配为Micrometer MeterFilter
        MeterFilter micrometerFilter = MeterFilter.dropFiltered(
            meterId -> !dropwizardFilter.matches(meterId.getName(), null)
        );

        LoggingRegistryConfig config = loggingProperties.getExport().getLogging();
        // 将自定义Filter传入LoggingMeterRegistry构造方法
        return new LoggingMeterRegistry(config, Clock.SYSTEM, Collections.singletonList(micrometerFilter));
    }
}

更简便的方式:直接使用Micrometer原生MeterFilter

如果不需要依赖Dropwizard的Filter,直接用Micrometer的API更简洁:

@Bean
LoggingMeterRegistry loggingMeterRegistry(LoggingProperties loggingProperties) {
    // 自定义Filter:拒绝所有以"jvm."开头的指标
    MeterFilter customFilter = MeterFilter.denyNameStartsWith("jvm.");

    LoggingRegistryConfig config = loggingProperties.getExport().getLogging();
    return new LoggingMeterRegistry(config, Clock.SYSTEM, Collections.singletonList(customFilter));
}

内容的提问来源于stack exchange,提问作者Antonio Petricca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:20:17