如何在JavaSpring中排除某些http请求(例如/HealthEndpoint)

moiiocjp  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(415)

在我的spring boot应用程序中,设置如下:

logging.org.springframework.web: DEBUG

导致记录所有http请求,这很酷!
但是,由于不断轮询/health端点,这会对日志文件进行垃圾处理。如何仅为此端点禁用请求日志记录?

tvokkenx

tvokkenx1#

我建议使用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

相关问题