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

如何通过配置文件屏蔽特定API日志?无需修改代码

无需修改代码,通过配置实现特定API日志过滤

方案1:Logback/TurboFilter 直接过滤(零代码修改)

如果你用Logback做日志框架,直接在logback.xml里加个过滤器就能搞定,不用碰业务代码:

  • 要是你的日志消息里会打印请求URI,用RegexFilter匹配过滤:
<turboFilter class="ch.qos.logback.core.filter.RegexFilter">
    <!-- 匹配所有以/abc开头的请求日志 -->
    <regex>.*requestUri: /abc.*</regex>
    <OnMatch>DENY</OnMatch>
</turboFilter>
  • 要是你之前用MDC存过请求URI,也可以用MarkerFilter精准匹配:
<turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
    <Marker>EXCLUDE_ABC_API</Marker>
    <OnMatch>DENY</OnMatch>
</turboFilter>

(注:如果没存过MDC,RegexFilter仅靠日志内容匹配就完全够用)

方案2:Spring Boot 内置路径日志配置(适合Spring项目)

Spring Boot自带了路径级别的日志控制,直接在application.yml里配置就行,连日志框架配置文件都不用改:

logging:
  level:
    # 把你的日志类全路径填这里,比如com.example.interceptors.LogInterceptor
    com.example.interceptors.LogInterceptor:
      # 对/abc开头的路径直接关闭日志
      "[/abc/**]": OFF

这个方式会自动匹配请求路径,直接把对应路径的日志级别设为OFF,完全不用改代码。

方案3:硬编码改配置驱动(仅一次代码调整,后续全靠配置)

如果上面的方案都不适用,那可以把你现在的硬编码判断换成读配置,只改一次代码之后就再也不用碰了:
把原来的硬编码判断:

if (log.isInfoEnabled() && !!(request.getRequest().startsWith("abc"))) {
    logRequest(request, request.getRemoteAddr());
}

改成配置驱动的逻辑:

// 从配置文件读排除的API列表,默认值设为原来的"abc"兼容现有逻辑
@Value("${logging.exclude.api-patterns:abc}")
private List<String> excludeApis;

if (log.isInfoEnabled() && !isExcluded(request.getRequest())) {
    logRequest(request, request.getRemoteAddr());
}

private boolean isExcluded(String uri) {
    return excludeApis.stream().anyMatch(uri::startsWith);
}

之后在application.yml里配置要排除的API,后续新增排除项直接改配置即可:

logging:
  exclude:
    api-patterns:
      - "abc"
      - "xyz"

内容的提问来源于stack exchange,提问作者A.S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:08:26