java - 如何在 Java Spring 中排除某些 HTTP 请求(例如 /health Endpoint)
问题描述
在我的 Spring Boot 应用程序中,以下设置:
logging.org.springframework.web: DEBUG
导致记录所有 HTTP 请求,这很酷!
但是,由于不断轮询 /health 端点,这会向日志文件发送垃圾邮件。如何仅为此端点禁用请求日志记录?
解决方案
我推荐使用 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
推荐阅读
- rust - 函数返回不可变引用,但借用检查器不这么认为
- linux - 从安装了 `docker.sock` 的 docker 容器中查找主机上的开放端口
- android - 如何更改我使用 SNAP 安装的 Android Studio 的超级用户设置
- node.js - 如何配置 Nginx 和 Node 以使用 SSL?
- python - 在另一列中创建基于 INT 的 N 行
- c - 军用时间和标准时间逻辑有效,但时间指示器字符串不起作用
- winapi - MFC:Ctrl-Shift 的加速器不起作用?
- java - 在 Red Hat EAP 7.3 上找不到命名的 JMS 队列
- javascript - puppeteer / chromium:生成 pdf 不同的 div 高度
- sql-server - SSIS在两个表之间复制很慢