|  | @@ -0,0 +1,48 @@
 | 
	
		
			
				|  |  | +package com.tzld.piaoquan.recommend.server.util;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import org.apache.commons.lang.RandomStringUtils;
 | 
	
		
			
				|  |  | +import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | +import org.slf4j.MDC;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.net.InetAddress;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * @author dyp
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +public class TraceUtils {
 | 
	
		
			
				|  |  | +    public static final String TRACE_ID_KEY = "traceId";
 | 
	
		
			
				|  |  | +    public static final String DEFAULT_TRACE_ID = "default_trace_id";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static void setMDC() {
 | 
	
		
			
				|  |  | +        MDC.put(TraceUtils.TRACE_ID_KEY, genTraceId());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static void removeMDC() {
 | 
	
		
			
				|  |  | +        MDC.remove(TraceUtils.TRACE_ID_KEY);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static String genTraceId() {
 | 
	
		
			
				|  |  | +        StringBuilder traceIdBuilder = new StringBuilder();
 | 
	
		
			
				|  |  | +        InetAddress address = InetAddress.getLoopbackAddress();
 | 
	
		
			
				|  |  | +        if (address == null) {
 | 
	
		
			
				|  |  | +            return DEFAULT_TRACE_ID;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        String addressStr = address.getHostAddress();
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(addressStr)) {
 | 
	
		
			
				|  |  | +            return DEFAULT_TRACE_ID;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        String[] addressArr = addressStr.split("\\.");
 | 
	
		
			
				|  |  | +        if (addressArr.length != 4) {
 | 
	
		
			
				|  |  | +            return DEFAULT_TRACE_ID;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        traceIdBuilder.append(StringUtils.leftPad(Integer.toHexString(Integer.valueOf(addressArr[0])), 2, '0'))
 | 
	
		
			
				|  |  | +                .append(StringUtils.leftPad(Integer.toHexString(Integer.valueOf(addressArr[1])), 2, '0'))
 | 
	
		
			
				|  |  | +                .append(StringUtils.leftPad(Integer.toHexString(Integer.valueOf(addressArr[2])), 2, '0'))
 | 
	
		
			
				|  |  | +                .append(StringUtils.leftPad(Integer.toHexString(Integer.valueOf(addressArr[3])), 2, '0'))
 | 
	
		
			
				|  |  | +                .append(System.currentTimeMillis())
 | 
	
		
			
				|  |  | +                .append(RandomStringUtils.randomAlphabetic(4))
 | 
	
		
			
				|  |  | +                .append(Thread.currentThread().getId());
 | 
	
		
			
				|  |  | +        return traceIdBuilder.toString();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |