首页 > 解决方案 > 如何在 Java Spring 中排除某些 HTTP 请求(例如 /health Endpoint)

问题描述

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

logging.org.springframework.web: DEBUG

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

但是,由于不断轮询 /health 端点,这会向日志文件发送垃圾邮件。如何仅为此端点禁用请求日志记录?

标签: javaspringloggingfilteractuator

解决方案


我推荐使用 Spring Built-In request logging filter 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

推荐阅读