package com.shhxzq.fin.lifeapp.model.base; import java.util.UUID; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; /** * 基础日志操作类-同一个线程的uuid是一样的 * * @author Gxx */ public class BaseUuidLogger extends Logger { /** * 通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值 * 使得同一个线程的uuid是一样的 */ private static ThreadLocal uuid = new ThreadLocal() { /** * 初始值 */ public String initialValue() { return "[uuid:" + UUID.randomUUID().toString() + "] : "; } }; /** * 空参数构造函数 */ public BaseUuidLogger() { super(StringUtils.EMPTY); } /** * 构造方法 * * @param name */ protected BaseUuidLogger(String name) { super(name); } @Override public void trace(Object message) { message = getStackString() + uuid.get() + message; super.trace(message); } @Override public void debug(Object message) { message = getStackString() + uuid.get() + message; super.debug(message); } @Override public void error(Object message) { message = getStackString() + uuid.get() + message; super.error(message); } @Override public void error(Object message, Throwable t) { message = getStackString() + uuid.get() + message; super.error(message, t); } @Override public void fatal(Object message) { message = getStackString() + uuid.get() + message; super.fatal(message); } @Override public void fatal(Object message, Throwable t) { message = getStackString() + uuid.get() + message; super.fatal(message, t); } @Override public void info(Object message) { message = getStackString() + uuid.get() + message; super.info(message); } @Override public void warn(Object message) { message = getStackString() + uuid.get() + message; super.warn(message); } /** * 获取堆栈信息 * @param stackElements * @return */ private String getStackString() { StackTraceElement[] stackElements = new Throwable().getStackTrace(); if (stackElements != null && stackElements.length > 2) { return "[" + stackElements[2].getClassName()+ ".java:" + stackElements[2].getMethodName() + "():" + stackElements[2].getLineNumber() + "]"; } return StringUtils.EMPTY; } }