Generate LOGID based on system ID, date, IP address, and auto-increment

import java.net.InetAddress;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

import org.apache.commons.lang.StringUtils;

public class LogIdUtil {

	private static String machineIp;
	
	private static final transient AtomicInteger ID = new AtomicInteger(new Random().nextInt(99999999));
	private static final DateFormat df = new SimpleDateFormat("yyMMddHHmmss");
	
	static {
		try {
			String[] ips = InetAddress.getLocalHost().getHostAddress().split("\\.");
			machineIp = StringUtils.leftPad(Integer.toHexString(Integer.parseInt(ips[2])), 2, '0')
				+ StringUtils.leftPad(Integer.toHexString(Integer.parseInt(ips[3])), 2, '0');
		} catch (Exception e) {
			throw new RuntimeException("Init machineIp failed", e);
		}
	}

	/**
	 * Generate LOGID based on system ID, date, IP address, and auto-increment
	 * @param systemId Four-digit system ID
	 * @return
	 */
	public static String getId() {
		synchronized (LogIdUtil.class) {
			ID.compareAndSet(999999999, 0);
			return df.format(new Date())
					+ machineIp
					+ StringUtils.leftPad(String.valueOf(ID.incrementAndGet()), 10, '0');
		}

	}
	
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326272045&siteId=291194637