首页 > 解决方案 > Spring Boot 和 Slf4j 2 Http 请求元数据日志记录拦截器?

问题描述

我想配置我的日志记录设置,以便传入请求带有一个 id(即 UUID)标记,用于跟踪整个应用程序中的请求和进程(即控制器类、服务类等)以及其他相关信息请求(即主机名、IP 地址...)。

参考 slf4j 2 文档,我看到提到ThreadContext。对于向我的 spring-boot 应用程序发出的每个请求,我想做类似的事情:

ThreadContext.put("id", UUID.randomUUID().toString());
ThreadContext.put("ipAddress", this.request.getRemoteAddr());
...

并在我的调试器的 PatternLayout 中调用这些键,如下所示:%X{key}。理想情况下,这将产生类似于以下内容:

[INFO] request #UUID1 #IP1: start.
[INFO] request #UUID1 #IP1: do something controller class 
[INFO] request #UUID2 #IP2: start.
[INFO] request #UUID1 #IP1: do something service class
[INFO] request #UUID2 #IP2: do something controller class 
[INFO] request #UUID2 #IP2: do something service class 
[INFO] request #UUID1 #IP1: end.
[INFO] request #UUID2 #IP2: end.

虽然我不确定如何开始实际实施这一点。任何见解将不胜感激!

标签: javaspringspring-bootlog4jlog4j2

解决方案


您应该使用 slf4j https://ivanursul.com/slf4j-mdc查看 MDC(映射诊断上下文)

创建一个 Servlet 过滤器,它在 MDC 中设置所需的参数,它们将在请求中可用并自动记录。


推荐阅读