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

如何禁用Spring Boot Actuator端点200 OK请求的日志?

解决Spring Boot Actuator Prometheus端点日志刷屏问题

你的刷屏日志都是Spring MVC输出的DEBUG级日志,来自FrameworkServlet、LogFormatUtils等类。以下是几个无需硬编码URL、能精准屏蔽Prometheus端点成功请求日志的方案:

方案1:Logback自定义过滤器(仅需配置文件,推荐)

如果使用Spring Boot默认的Logback日志框架,直接修改/创建src/main/resources/logback-spring.xml,添加针对Prometheus日志的过滤规则:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 继承Spring Boot默认日志配置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <!-- 过滤FrameworkServlet中Prometheus的200响应日志 -->
    <logger name="org.springframework.web.servlet.FrameworkServlet" level="DEBUG">
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator>
                <expression>(message.contains("Completed 200 OK") &amp;&amp; message.contains("prometheus")) || message.contains("/actuator/prometheus")</expression>
            </evaluator>
            <OnMatch>DENY</OnMatch>
        </filter>
    </logger>

    <!-- 过滤LogFormatUtils中Prometheus的请求/响应内容日志 -->
    <logger name="org.springframework.core.log.LogFormatUtils" level="DEBUG">
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator>
                <expression>message.contains("/actuator/prometheus") || message.contains("system_cpu_usage")</expression>
            </evaluator>
            <OnMatch>DENY</OnMatch>
        </filter>
    </logger>

    <!-- 过滤消息转换器处理Prometheus响应的日志 -->
    <logger name="org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor" level="DEBUG">
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator>
                <expression>message.contains("text/plain;version=0.0.4")</expression>
            </evaluator>
            <OnMatch>DENY</OnMatch>
        </filter>
    </logger>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

这个配置会精准拦截Prometheus端点的请求日志、200响应日志,以及响应内容的DEBUG输出,完全不影响其他端点的日志。

方案2:极简配置(牺牲部分精准度)

如果不想写XML配置,可直接在application.properties中调整特定类的日志级别,关闭那些输出Prometheus刷屏日志的类的DEBUG日志:

# 关闭LogFormatUtils的DEBUG日志(该类主要输出请求/响应内容)
logging.level.org.springframework.core.log.LogFormatUtils=INFO
# 关闭FrameworkServlet的DEBUG日志(会过滤所有端点的200响应DEBUG日志)
logging.level.org.springframework.web.servlet.FrameworkServlet=INFO

注意:这个方法会关闭上述类的所有DEBUG日志,如果你需要其他端点的这些日志,方案1更合适。

方案3:基于端点类的MDC过滤(无URL硬编码)

如果需要完全不依赖URL,可通过识别Prometheus端点的类来标记请求,再过滤日志:

  1. 写一个拦截器,标记Prometheus端点的请求:
@Component
public class PrometheusMarkerInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (handler instanceof HandlerMethod handlerMethod) {
            if (handlerMethod.getBean() instanceof PrometheusScrapeEndpoint) {
                MDC.put("isPrometheus", "true");
            }
        }
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        MDC.remove("isPrometheus");
    }
}
  1. 注册拦截器:
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private PrometheusMarkerInterceptor interceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptor);
    }
}
  1. 在logback-spring.xml中添加MDC过滤器:
<turboFilter class="ch.qos.logback.classic.turbo.MDCFilter">
    <MDCKey>isPrometheus</MDCKey>
    <Value>true</Value>
    <OnMatch>DENY</OnMatch>
</turboFilter>

这个方法通过识别PrometheusScrapeEndpoint类标记请求,即使未来端点URL变更,也无需修改代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:16:08