Commit fd754c41500f2c8a2ecc68d23ff64979631852a0

Authored by jiangjiazhi
1 parent 1bda09e70e

针对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 }