java - 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.
虽然我不确定如何开始实际实施这一点。任何见解将不胜感激!
解决方案
您应该使用 slf4j https://ivanursul.com/slf4j-mdc查看 MDC(映射诊断上下文)
创建一个 Servlet 过滤器,它在 MDC 中设置所需的参数,它们将在请求中可用并自动记录。
推荐阅读
- android - 如何使前缀 textSize 与实际用户输入的 textSize 相同?
- vue.js - 修改子组件中的选择值后触发函数 - VueJs
- javascript - 一个有趣的 Javascript 任务
- java - Reactor Java Flux 与 Mono
- javascript - 提交后如何显示一个部分
- database - 数据库设计:如何处理空值?
- django - 在 Django/Vue 应用程序中更改公共 index.html 中的 chunk_vendors/app js 文件导入 url
- laravel - 使用一些数据过滤从日期到日期
- javascript - 如何使用 Javascript 随机化 WordPress 中的图像(高级自定义字段)
- f# - 为什么在这种情况下在 F# 中使用引用