java Spring引导和Slf4j 2 Http请求元数据日志拦截器?
我想配置我的日志记录设置,以便使用id(即UUID)标记传入请求,该id用于跟踪整个应用程序中的请求和进程(即控制器类、服务类等)以及请求中的其他相关信息(即主机名、ipaddress…)
参考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.
尽管我不确定如何开始实际实施。如有任何见解,将不胜感激
# 1 楼答案
Spring Cloud Sleuth将为您完成所有这些。。只需将其包含在类路径中,并将您关心的属性添加到日志输出中。它还自动向控制器和客户端发送指令,以传递标题属性
# 2 楼答案
通过使用实现Filter类的类,我能够通过使用以下代码以及调用Log4j 2 PatternLayout中的键来获得所需的行为:
# 3 楼答案
您应该使用slf4j查看MDC(映射诊断上下文) https://ivanursul.com/slf4j-mdc
创建一个Servlet过滤器,它在MDC中设置所需的参数,这些参数将在整个请求中可用,并自动记录