Java 添加trace.id和transaction.id Springboot
我有一个Springboot微型服务。对于日志记录,我使用弹性公共方案,使用实现 我想设置trace.ID和transaction.ID,但不确定如何设置Java 添加trace.id和transaction.id Springboot,java,spring-boot,logging,log4j2,elastic-common-schema,Java,Spring Boot,Logging,Log4j2,Elastic Common Schema,我有一个Springboot微型服务。对于日志记录,我使用弹性公共方案,使用实现 我想设置trace.ID和transaction.ID,但不确定如何设置 还有一个问题,我认为trace.ID应该是通过多个系统跟踪请求的ID。transaction.ID仅用于服务内部?我以为我已经记录了这一点,但最接近的是Log4j审计。我想我需要在我的博客中添加一个新条目。简单的回答是使用log4j2。首先,当用户登录时,创建一个会话映射,其中包含您希望在每个请求中捕获的数据,例如用户的ip地址和loginI
还有一个问题,我认为trace.ID应该是通过多个系统跟踪请求的ID。transaction.ID仅用于服务内部?我以为我已经记录了这一点,但最接近的是Log4j审计。我想我需要在我的博客中添加一个新条目。简单的回答是使用log4j2。首先,当用户登录时,创建一个会话映射,其中包含您希望在每个请求中捕获的数据,例如用户的ip地址和loginId。然后创建servlet过滤器或Spring拦截器,将该数据以及唯一的请求id添加到log4j2的线程上下文映射中 所有分支事件都将包括ThreadContext中的数据。ECSLayout自动包括ThreadContextMap中的所有字段 最后,您需要将RequestContext传播到下游服务。您可以通过创建一个Spring拦截器来实现这一点,该拦截器连接到RestTemplate中,RestTemplate将RequestContext字段转换为HTTP头。然后,下游服务有一个过滤器或Spring拦截器,将头转换回RequestContext属性。Log4j审计(如上所述)有所有这些组件的示例和实现
我应该补充一点,上面描述的方法没有实现规范中描述的跟踪,因此它也与Elasticsearch的不兼容。然而,值得注意的是,如果将Elasticsearch的分布式跟踪支持与New Relic的分布式跟踪支持结合在一起,它们将互相攻击。我想我已经记录了这一点,但最接近的是Log4j审计。我想我需要在我的博客中添加一个新条目。简单的回答是使用log4j2。首先,当用户登录时,创建一个会话映射,其中包含您希望在每个请求中捕获的数据,例如用户的ip地址和loginId。然后创建servlet过滤器或Spring拦截器,将该数据以及唯一的请求id添加到log4j2的线程上下文映射中 所有分支事件都将包括ThreadContext中的数据。ECSLayout自动包括ThreadContextMap中的所有字段 最后,您需要将RequestContext传播到下游服务。您可以通过创建一个Spring拦截器来实现这一点,该拦截器连接到RestTemplate中,RestTemplate将RequestContext字段转换为HTTP头。然后,下游服务有一个过滤器或Spring拦截器,将头转换回RequestContext属性。Log4j审计(如上所述)有所有这些组件的示例和实现
我应该补充一点,上面描述的方法没有实现规范中描述的跟踪,因此它也与Elasticsearch的不兼容。然而,值得注意的是,如果将Elasticsearch的分布式跟踪支持与New Relic的分布式跟踪支持结合在一起,它们将相互影响。如下配置您的日志模式
%d{yyyy-MM-dd HH:MM:ss.SSS}%thread[%X{trace-id}][%-5level]%class{0}-%msg%n
将跟踪Id放入MDC中。(MDC属于特定的线程上下文)
因此,每当日志打印消息时,它都会打印跟踪id。
按照下面的文章进行操作。如下配置日志模式
%d{yyyy-MM-dd HH:MM:ss.SSS}%thread[%X{trace-id}][%-5level]%class{0}-%msg%n
将跟踪Id放入MDC中。(MDC属于特定的线程上下文)
因此,每当日志打印消息时,它都会打印跟踪id。
跟随下面的文章
`MDC.put("trace-id", "traceid1");`