diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/TraceIdGenerator.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/TraceIdGenerator.java index 61ea2fe51..64f0bf6fb 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/TraceIdGenerator.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/TraceIdGenerator.java @@ -1,13 +1,34 @@ package com.ai.cloud.skywalking.util; +import java.util.HashMap; +import java.util.Random; import java.util.UUID; public final class TraceIdGenerator { + private static final ThreadLocal ThreadTraceIdSequence = new ThreadLocal(); + + private static final String PROCESS_UUID; + + static{ + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + PROCESS_UUID = uuid.substring(uuid.length() - 7); + } + private TraceIdGenerator() { - // Non } - - public static String generate() { - return UUID.randomUUID().toString().replaceAll("-", ""); + + public static String generate(){ + Integer seq = ThreadTraceIdSequence.get(); + if(seq == null || seq == 10000 || seq > 10000){ + seq = 0; + } + seq++; + ThreadTraceIdSequence.set(seq); + + return System.currentTimeMillis() + + "." + PROCESS_UUID + + "." + BuriedPointMachineUtil.getProcessNo() + + "." + Thread.currentThread().getId() + + "." + seq; } }