Commit fd754c41500f2c8a2ecc68d23ff64979631852a0
1 parent
1bda09e70e
Exists in
master
and in
6 other branches
针对mongoquery对象把参数打印出来
Showing 1 changed file with 80 additions and 75 deletions
platform-common/src/main/java/com/lyms/platform/common/perf/DalMethodInterceptor.java
View file @
fd754c4
| 1 | 1 | package com.lyms.platform.common.perf; |
| 2 | 2 | |
| 3 | +import com.lyms.platform.common.dao.operator.MongoQuery; | |
| 3 | 4 | import com.lyms.platform.common.utils.ExceptionUtils; |
| 4 | 5 | import org.aopalliance.intercept.MethodInterceptor; |
| 5 | 6 | import org.aopalliance.intercept.MethodInvocation; |
| 6 | 7 | |
| 7 | 8 | |
| 8 | 9 | |
| 9 | 10 | |
| 10 | 11 | |
| 11 | 12 | |
| 12 | 13 | |
| ... | ... | @@ -10,89 +11,93 @@ |
| 10 | 11 | import java.util.Map; |
| 11 | 12 | |
| 12 | 13 | /** |
| 13 | - * | |
| 14 | 14 | * dao层的性能拦截类,用于统计dal层操作的耗时 |
| 15 | - * | |
| 16 | - * @author Administrator | |
| 17 | 15 | * |
| 16 | + * @author Administrator | |
| 18 | 17 | */ |
| 19 | 18 | public class DalMethodInterceptor implements MethodInterceptor { |
| 20 | 19 | |
| 21 | - private Logger logger = LoggerFactory.getLogger("DAL-MONITOR"); | |
| 20 | + private Logger logger = LoggerFactory.getLogger("DAL-MONITOR"); | |
| 22 | 21 | |
| 23 | - private static Map<String,Object> typeMap = new HashMap<>(); | |
| 24 | - { | |
| 25 | - typeMap.put("int",0); | |
| 26 | - typeMap.put("double",0.00); | |
| 27 | - typeMap.put("long",0); | |
| 28 | - } | |
| 29 | - | |
| 30 | - /** | |
| 31 | - * 阀值超过该阀值就是warn 级别的日志 | |
| 32 | - */ | |
| 33 | - private int threshold=50; | |
| 22 | + private static Map<String, Object> typeMap = new HashMap<>(); | |
| 34 | 23 | |
| 35 | - public void setThreshold(int threshold) { | |
| 36 | - this.threshold = threshold; | |
| 37 | - } | |
| 24 | + { | |
| 25 | + typeMap.put("int", 0); | |
| 26 | + typeMap.put("double", 0.00); | |
| 27 | + typeMap.put("long", 0); | |
| 28 | + } | |
| 38 | 29 | |
| 39 | - @Override | |
| 40 | - public Object invoke(MethodInvocation arg0) throws Throwable { | |
| 41 | - long start = System.currentTimeMillis(); | |
| 42 | - try { | |
| 30 | + /** | |
| 31 | + * 阀值超过该阀值就是warn 级别的日志 | |
| 32 | + */ | |
| 33 | + private int threshold = 50; | |
| 43 | 34 | |
| 44 | - Object object = arg0.proceed(); | |
| 45 | - if(null==object &&!"Void".equalsIgnoreCase(arg0.getMethod().getReturnType().getSimpleName())&&arg0.getMethod().getReturnType().isPrimitive()){ | |
| 46 | - logger.warn("method return is Primitive ,result is null."); | |
| 47 | - return typeMap.get(arg0.getMethod().getReturnType()); | |
| 48 | - } | |
| 49 | - return object; | |
| 50 | - } catch (Exception e) { | |
| 51 | - ExceptionUtils.catchException(e,"DalMethodInterceptor error."); | |
| 52 | - throw e; | |
| 53 | - }finally{ | |
| 54 | - long end = System.currentTimeMillis(); | |
| 55 | - long i =(end - start); | |
| 56 | - boolean slow=i>threshold; | |
| 57 | - String result = arg0.getThis().getClass().getSimpleName() + "." | |
| 58 | - + arg0.getMethod().getName() | |
| 59 | - + getShortArgs(arg0.getArguments(),slow) + " use " + i | |
| 60 | - + "ms."; | |
| 61 | - if(slow){ | |
| 62 | - logger.warn(result); | |
| 63 | - }else{ | |
| 64 | - logger.info(result); | |
| 65 | - } | |
| 66 | - } | |
| 67 | - } | |
| 68 | - | |
| 69 | - /** | |
| 70 | - * 获取参数列表 | |
| 71 | - * | |
| 72 | - * @param obj | |
| 73 | - * @return | |
| 74 | - */ | |
| 75 | - private String getShortArgs(Object[] obj,boolean f) { | |
| 76 | - StringBuilder builder = new StringBuilder("("); | |
| 77 | - for (Object o : obj) { | |
| 78 | - if(null==o){ | |
| 79 | - continue; | |
| 80 | - } | |
| 81 | - if (o.getClass().isPrimitive()) { | |
| 82 | - builder.append(o); | |
| 83 | - } else { | |
| 84 | - builder.append(o.getClass().getSimpleName()); | |
| 85 | - if(f){ | |
| 86 | - builder.append("|"); | |
| 87 | - builder.append(o.toString()); | |
| 88 | - } | |
| 89 | - } | |
| 90 | - builder.append(","); | |
| 91 | - } | |
| 92 | - if(builder.toString().endsWith(",")){ | |
| 93 | - builder.deleteCharAt(builder.length() - 1); | |
| 94 | - } | |
| 95 | - return builder.append(")").toString(); | |
| 96 | - } | |
| 35 | + public void setThreshold(int threshold) { | |
| 36 | + this.threshold = threshold; | |
| 37 | + } | |
| 38 | + | |
| 39 | + @Override | |
| 40 | + public Object invoke(MethodInvocation arg0) throws Throwable { | |
| 41 | + long start = System.currentTimeMillis(); | |
| 42 | + try { | |
| 43 | + | |
| 44 | + Object object = arg0.proceed(); | |
| 45 | + if (null == object && !"Void".equalsIgnoreCase(arg0.getMethod().getReturnType().getSimpleName()) && arg0.getMethod().getReturnType().isPrimitive()) { | |
| 46 | + logger.warn("method return is Primitive ,result is null."); | |
| 47 | + return typeMap.get(arg0.getMethod().getReturnType()); | |
| 48 | + } | |
| 49 | + return object; | |
| 50 | + } catch (Exception e) { | |
| 51 | + ExceptionUtils.catchException(e, "DalMethodInterceptor error."); | |
| 52 | + throw e; | |
| 53 | + } finally { | |
| 54 | + long end = System.currentTimeMillis(); | |
| 55 | + long i = (end - start); | |
| 56 | + boolean slow = i > threshold; | |
| 57 | + String result = arg0.getThis().getClass().getSimpleName() + "." | |
| 58 | + + arg0.getMethod().getName() | |
| 59 | + + getShortArgs(arg0.getArguments(), slow) + " use " + i | |
| 60 | + + "ms."; | |
| 61 | + if (slow) { | |
| 62 | + logger.warn(result); | |
| 63 | + } else { | |
| 64 | + logger.info(result); | |
| 65 | + } | |
| 66 | + } | |
| 67 | + } | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * 获取参数列表 | |
| 71 | + * | |
| 72 | + * @param obj | |
| 73 | + * @return | |
| 74 | + */ | |
| 75 | + private String getShortArgs(Object[] obj, boolean f) { | |
| 76 | + StringBuilder builder = new StringBuilder("("); | |
| 77 | + for (Object o : obj) { | |
| 78 | + if (null == o) { | |
| 79 | + continue; | |
| 80 | + } | |
| 81 | + if (o.getClass().isPrimitive()) { | |
| 82 | + builder.append(o); | |
| 83 | + } else { | |
| 84 | + builder.append(o.getClass().getSimpleName()); | |
| 85 | + if (f) { | |
| 86 | + builder.append("|"); | |
| 87 | + if ("MongoQuery".equals(o.getClass().getSimpleName())) { | |
| 88 | + MongoQuery mongoQuery = (MongoQuery)o; | |
| 89 | + builder.append(mongoQuery.convertToMongoQuery()); | |
| 90 | + } else { | |
| 91 | + builder.append(o.toString()); | |
| 92 | + } | |
| 93 | + } | |
| 94 | + } | |
| 95 | + builder.append(","); | |
| 96 | + } | |
| 97 | + if (builder.toString().endsWith(",")) { | |
| 98 | + builder.deleteCharAt(builder.length() - 1); | |
| 99 | + } | |
| 100 | + return builder.append(")").toString(); | |
| 101 | + } | |
| 97 | 102 | } |