diff --git a/platform-common/src/main/java/com/lyms/platform/common/perf/DalMethodInterceptor.java b/platform-common/src/main/java/com/lyms/platform/common/perf/DalMethodInterceptor.java index 7f44180..ca54df8 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/perf/DalMethodInterceptor.java +++ b/platform-common/src/main/java/com/lyms/platform/common/perf/DalMethodInterceptor.java @@ -1,5 +1,6 @@ package com.lyms.platform.common.perf; +import com.lyms.platform.common.dao.operator.MongoQuery; import com.lyms.platform.common.utils.ExceptionUtils; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; @@ -10,88 +11,92 @@ import java.util.HashMap; import java.util.Map; /** - * * dao层的性能拦截类,用于统计dal层操作的耗时 - * - * @author Administrator * + * @author Administrator */ public class DalMethodInterceptor implements MethodInterceptor { - private Logger logger = LoggerFactory.getLogger("DAL-MONITOR"); + private Logger logger = LoggerFactory.getLogger("DAL-MONITOR"); + + private static Map typeMap = new HashMap<>(); + + { + typeMap.put("int", 0); + typeMap.put("double", 0.00); + typeMap.put("long", 0); + } + + /** + * 阀值超过该阀值就是warn 级别的日志 + */ + private int threshold = 50; - private static Map typeMap = new HashMap<>(); - { - typeMap.put("int",0); - typeMap.put("double",0.00); - typeMap.put("long",0); - } - - /** - * 阀值超过该阀值就是warn 级别的日志 - */ - private int threshold=50; + public void setThreshold(int threshold) { + this.threshold = threshold; + } - public void setThreshold(int threshold) { - this.threshold = threshold; - } + @Override + public Object invoke(MethodInvocation arg0) throws Throwable { + long start = System.currentTimeMillis(); + try { - @Override - public Object invoke(MethodInvocation arg0) throws Throwable { - long start = System.currentTimeMillis(); - try { + Object object = arg0.proceed(); + if (null == object && !"Void".equalsIgnoreCase(arg0.getMethod().getReturnType().getSimpleName()) && arg0.getMethod().getReturnType().isPrimitive()) { + logger.warn("method return is Primitive ,result is null."); + return typeMap.get(arg0.getMethod().getReturnType()); + } + return object; + } catch (Exception e) { + ExceptionUtils.catchException(e, "DalMethodInterceptor error."); + throw e; + } finally { + long end = System.currentTimeMillis(); + long i = (end - start); + boolean slow = i > threshold; + String result = arg0.getThis().getClass().getSimpleName() + "." + + arg0.getMethod().getName() + + getShortArgs(arg0.getArguments(), slow) + " use " + i + + "ms."; + if (slow) { + logger.warn(result); + } else { + logger.info(result); + } + } + } - Object object = arg0.proceed(); - if(null==object &&!"Void".equalsIgnoreCase(arg0.getMethod().getReturnType().getSimpleName())&&arg0.getMethod().getReturnType().isPrimitive()){ - logger.warn("method return is Primitive ,result is null."); - return typeMap.get(arg0.getMethod().getReturnType()); - } - return object; - } catch (Exception e) { - ExceptionUtils.catchException(e,"DalMethodInterceptor error."); - throw e; - }finally{ - long end = System.currentTimeMillis(); - long i =(end - start); - boolean slow=i>threshold; - String result = arg0.getThis().getClass().getSimpleName() + "." - + arg0.getMethod().getName() - + getShortArgs(arg0.getArguments(),slow) + " use " + i - + "ms."; - if(slow){ - logger.warn(result); - }else{ - logger.info(result); - } - } - } - - /** - * 获取参数列表 - * - * @param obj - * @return - */ - private String getShortArgs(Object[] obj,boolean f) { - StringBuilder builder = new StringBuilder("("); - for (Object o : obj) { - if(null==o){ - continue; - } - if (o.getClass().isPrimitive()) { - builder.append(o); - } else { - builder.append(o.getClass().getSimpleName()); - if(f){ - builder.append("|"); - builder.append(o.toString()); - } - } - builder.append(","); - } - if(builder.toString().endsWith(",")){ - builder.deleteCharAt(builder.length() - 1); - } - return builder.append(")").toString(); - } + /** + * 获取参数列表 + * + * @param obj + * @return + */ + private String getShortArgs(Object[] obj, boolean f) { + StringBuilder builder = new StringBuilder("("); + for (Object o : obj) { + if (null == o) { + continue; + } + if (o.getClass().isPrimitive()) { + builder.append(o); + } else { + builder.append(o.getClass().getSimpleName()); + if (f) { + builder.append("|"); + if ("MongoQuery".equals(o.getClass().getSimpleName())) { + MongoQuery mongoQuery = (MongoQuery)o; + builder.append(mongoQuery.convertToMongoQuery()); + } else { + builder.append(o.toString()); + } + } + } + builder.append(","); + } + if (builder.toString().endsWith(",")) { + builder.deleteCharAt(builder.length() - 1); + } + return builder.append(")").toString(); + } }