package com.jd.buy.giftshop.trade.web.aspect; import java.util.HashMap; import java.util.Map; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import com.jd.buy.giftshop.trade.common.utils.JsonMapper; import com.jd.ump.profiler.CallerInfo; import com.jd.ump.profiler.proxy.Profiler; /** * UmpLog切面 * * @author YANGLiiN * @date 13-8-15 上午11:11 */ public class UmpLogAspect implements InitializingBean { private static final Logger logger = LoggerFactory.getLogger(UmpLogAspect.class); private JsonMapper jsonMapper = new JsonMapper(); private boolean enable = true; private String system; private int maxExecTime = 1000; private Map umpMaps = new HashMap(); public Object execUmpLog(ProceedingJoinPoint jp) throws Throwable { MethodSignature ms = (MethodSignature) jp.getSignature(); String className = jp.getTarget().getClass().getName(); String methodName = ms.getName(); CallerInfo callerInfo = null; Object rs = null; long start; try { if (enable) { String umpLogKey = umpMaps.get(className); if (umpLogKey != null && !"".equals(umpLogKey)) { StringBuilder sb = new StringBuilder(system).append(".") .append(umpLogKey) .append(".") .append(methodName); String jproKey = sb.toString(); callerInfo = Profiler.registerInfo(jproKey, false, true); } } start = System.currentTimeMillis(); rs = jp.proceed(); long time = System.currentTimeMillis() - start; if (time > maxExecTime) { logger.info("***调用【{}】方法执行耗时【{}ms】***", className + "." + methodName, time); } } catch (Throwable e) { if (callerInfo != null) { Profiler.functionError(callerInfo); } logger.error("***参数列表【{}】,执行结果【{}】,异常堆栈【{}】***", jsonMapper.toJson(jp.getArgs()), jsonMapper.toJson(rs), e); throw new Throwable(e); } finally { if (callerInfo != null) { Profiler.registerInfoEnd(callerInfo); } } return rs; } @Override public void afterPropertiesSet() throws Exception { if (enable) { Profiler.InitHeartBeats(system + ".heart"); Profiler.registerJVMInfo(system + ".jvm"); } } public void setEnable(boolean enable) { this.enable = enable; } public void setMaxExecTime(int maxExecTime) { this.maxExecTime = maxExecTime; } public void setSystem(String system) { this.system = system; } public void setUmpMaps(Map umpMaps) { this.umpMaps = umpMaps; } }