**自定义一个traceId生成器:**
其中的generate方法:
生成的traceld包括以下四部分:
- ·IP地址(8位)-取得当前机器的IP地址,并将其转换为十六进制格式·
- ·时间戳(13位) -使用Java 8的Instant类获取当前的毫秒级时间戳。
- ·进程号(5位) - 使用Java的ManagementFactory类获取当前VM进程的PID,并保证总长度为5位。
- ·自增序列号(4位) - 一个在1000到9999之间循环自增的数。
穿插一点个人理解:
为什么需要traceid呢?
- 当你的系统是分布式或者微服务时,一个用户可能会穿过多个服务,每个服务可能都会生成一些日志,但由于系统是微服务/分布式的,会运行在不同的物理机器上,如果没有一个统一的标识符来链接这些日志,就很难理解一个请求的完整过程。
- traceid就是这样一个标识符,它在请求进入系统时生成,然后沿着请求的执行路径传递给所有参与处理该请求的服务。这些服务在生成日志时,会把traceid包含在日志中。这样,通过搜索同一traceid的所有日志,就可以追踪到整个请求的执行过程。