如何在 Java Spring 中排除某些 HTTP 请求例如 /health Endpoint

问题描述

在我的 Spring Boot 应用程序中,以下设置:

logging.org.springframework.web: DEBUG

记录所有 HTTP 请求,这很酷!

然而,随着 /health 端点不断被轮询,这会向日志文件发送垃圾邮件。 如何仅为此端点禁用请求日志记录?

解决方法

我建议使用 Spring 内置请求日志过滤器 CommonsRequestLoggingFilter

要启用日志过滤器,您需要设置属性:

logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG

但是当您需要指定启用日志记录的自定义规则时,您可以通过以下方式创建自定义实现:

@Component
public class RequestLoggingFilter extends AbstractRequestLoggingFilter {

    private Set<String> excludedUrls = Set.of("/health");

    @Override
    protected boolean shouldLog(HttpServletRequest request) {
        if(excludedUrls.contains(request.getRequestURI())) {
            return false;
        }
        return logger.isDebugEnabled();
    }

    @Override
    protected void beforeRequest(HttpServletRequest request,String message) {
        logger.debug(message);
    }

    @Override
    protected void afterRequest(HttpServletRequest request,String message) {
        logger.debug(message);
    }
}

并启用过滤器,将以下配置属性添加到 application.properties

logging.level.<package_name>.RequestLoggingFilter=DEBUG