如何通过配置文件屏蔽特定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.
相关产品推荐
相关产品推荐

