@Component @Slf4j @Aspect public class LogHandlerAspect {
讯享网讯享网</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String QUOTES = """<span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 匹配所有带有@LogHandler注解的方法 * </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)"> YiLiChenTu * @date 2021/8/26 18:44 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> *</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)"> @Pointcut(</span>"execution(@com.xxx.common.annotation.LogHandler * *(..)) "<span style="color: rgba(0, 0, 0, 1)">) </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> resultLog(){} @Around(value </span>= "resultLog()"<span style="color: rgba(0, 0, 0, 1)">) </span><span style="color: rgba(0, 0, 255, 1)">public</span> Object around(ProceedingJoinPoint point) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Throwable { MethodSignature signature </span>=<span style="color: rgba(0, 0, 0, 1)"> (MethodSignature) point.getSignature(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取切入点所在的方法</span> Method method =<span style="color: rgba(0, 0, 0, 1)"> signature.getMethod(); LogHandler logHandler </span>= method.getAnnotation(LogHandler.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (logHandler == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">){ </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> point.proceed(); } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取请求的类名</span> String className =<span style="color: rgba(0, 0, 0, 1)"> point.getTarget().getClass().getName(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取请求的方法名</span> String methodName =<span style="color: rgba(0, 0, 0, 1)"> method.getName(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">入参日志</span>before(point,signature,method,className,methodName,logHandler);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行方法</span> Object result =<span style="color: rgba(0, 0, 0, 1)"> point.proceed(); </span><span style="color: rgba(0, 0, 255, 1)">boolean</span> fileOrStream =<span style="color: rgba(0, 0, 0, 1)"> isFileOrStream(result); Assert.isTrue(</span>!fileOrStream,"LogHandler====>> LoggerHandler日志注解不能作用于流或文件上"<span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">后置日志</span>afterLog(result,className,methodName,logHandler);讯享网</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result; } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 接口入参打印 * </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)"> YiLiChenTu * @date 2021/8/30 15:24 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> joinPoint * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> signature * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> method * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> className * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> methodName * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> logHandler * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> *</span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> before(JoinPoint joinPoint,MethodSignature signature,Method method,String className,String methodName,LogHandler logHandler) { </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">{ Object[] args </span>=<span style="color: rgba(0, 0, 0, 1)"> joinPoint.getArgs(); String[] parameterNames </span>=<span style="color: rgba(0, 0, 0, 1)"> signature.getParameterNames(); Annotation[][] annotationArr </span>=<span style="color: rgba(0, 0, 0, 1)"> method.getParameterAnnotations(); </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i < parameterNames.length; i++<span style="color: rgba(0, 0, 0, 1)">){ Annotation[] annotations </span>=<span style="color: rgba(0, 0, 0, 1)"> annotationArr[i]; LoggerOut loggerOut </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> (Annotation annotation : annotations) { </span><span style="color: rgba(0, 0, 255, 1)">if</span> (annotation <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> LoggerOut){ loggerOut </span>=<span style="color: rgba(0, 0, 0, 1)"> (LoggerOut) annotation; </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; } } </span><span style="color: rgba(0, 0, 255, 1)">if</span> (loggerOut == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">){ </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">未携带注解的参数不处理</span> <span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">; } String paramName </span>=<span style="color: rgba(0, 0, 0, 1)"> parameterNames[i]; Object arg </span>=<span style="color: rgba(0, 0, 0, 1)"> args[i]; </span><span style="color: rgba(0, 0, 255, 1)">if</span> (arg == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">){ printLog(logHandler,</span>"LogHandler-param-log====>> className:{},methodName:{},param:{},value:{}"<span style="color: rgba(0, 0, 0, 1)">, className,methodName, paramName, </span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">; } </span><span style="color: rgba(0, 0, 255, 1)">boolean</span> fileOrStream =<span style="color: rgba(0, 0, 0, 1)"> isFileOrStream(arg); Assert.isTrue(</span>!fileOrStream,"LogHandler-param-log====>> LoggerHandler日志注解不能作用于流或文件上"<span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">boolean</span> flag =<span style="color: rgba(0, 0, 0, 1)"> isBaseTypeOrString(arg); </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (flag){ </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">8中基本数据类型的包装类型,或者String类型,直接打印</span> printLog(logHandler,"LogHandler-param-log====>> className:{},methodName:{},param:{},value:{}"<span style="color: rgba(0, 0, 0, 1)">, className,methodName, paramName,arg); }</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (arg <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Collection){ </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">入参为集合类型,判断集合中是否为对象类型</span> Collection<?> list = (Collection<?><span style="color: rgba(0, 0, 0, 1)">) arg; </span><span style="color: rgba(0, 0, 255, 1)">int</span> size =<span style="color: rgba(0, 0, 0, 1)"> list.size(); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (size == 0 || isBaseTypeOrString(list.toArray()[0<span style="color: rgba(0, 0, 0, 1)">])){ printLog(logHandler,</span>"LogHandler-param-log====>> className:{},methodName:{},param:{},value:{}"<span style="color: rgba(0, 0, 0, 1)">, className,methodName, paramName,JSON.toJSONString(arg)); }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { log.warn(</span>"LogHandler-param-log====>> className:{},methodName:{},入参:{} 为集合类型,不打印"<span style="color: rgba(0, 0, 0, 1)">, className,methodName,paramName); } }</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (arg <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Object[]){ Object[] arr </span>=<span style="color: rgba(0, 0, 0, 1)"> (Object[]) arg; </span><span style="color: rgba(0, 0, 255, 1)">if</span> (arr.length == 0 || isBaseTypeOrString(arr[0<span style="color: rgba(0, 0, 0, 1)">])){ printLog(logHandler,</span>"LogHandler-param-log====>> className:{},methodName:{},param:{},value:{}"<span style="color: rgba(0, 0, 0, 1)">, className,methodName, paramName,JSON.toJSONString(arg)); }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { log.warn(</span>"LogHandler-param-log====>> className:{},methodName:{},param:{} 为对象数组,不打印"<span style="color: rgba(0, 0, 0, 1)">, className, methodName,paramName); } }</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (arg <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Map){ log.warn(</span>"LogHandler-param-log====>> className:{},methodName:{},入参:{} 为集合类型,不打印"<span style="color: rgba(0, 0, 0, 1)">, className,methodName,paramName); }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">入参为对象,反射获取对象字段值</span> String builder =<span style="color: rgba(0, 0, 0, 1)"> paramToString(arg); printLog(logHandler,</span>"LogHandler-param-log====>> className:{},methodName:{},param:{},value:{}"<span style="color: rgba(0, 0, 0, 1)">, className,methodName, paramName,builder); } } }</span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception e){ log.error(</span>"LogHandler打印入参异常"<span style="color: rgba(0, 0, 0, 1)">,e); } } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 返回结果日志输出 * </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)"> YiLiChenTu * @date 2021/8/30 15:24 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> result * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> className * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> methodName * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> logHandler * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> *</span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> afterLog(Object result,String className,String methodName,LogHandler logHandler){ </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 0, 255, 1)">if</span> (result <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Ret){ Ret</span><?> ret = (Ret<?><span style="color: rgba(0, 0, 0, 1)">) result; Object data </span>=<span style="color: rgba(0, 0, 0, 1)"> ret.getData(); logOut(data, logHandler, className, methodName); }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { logOut(result, logHandler, className, methodName); } }</span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception e){ log.error(</span>"日志切面后置处理异常"<span style="color: rgba(0, 0, 0, 1)">,e); } } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 获取需要打印的字段转换字符串 * </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)"> YiLiChenTu * @date 2021/8/30 10:31 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> result * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> *</span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String paramToString(Object result) { StringBuilder builder </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringBuilder(); builder.append(</span>"{"<span style="color: rgba(0, 0, 0, 1)">); List</span><Field> fields =<span style="color: rgba(0, 0, 0, 1)"> getAllFields(result); Reflect reflect </span>=<span style="color: rgba(0, 0, 0, 1)"> Reflect.on(result); Map</span><String, Reflect> fieldValueMap =<span style="color: rgba(0, 0, 0, 1)"> reflect.fields(); </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i < fields.size(); i++<span style="color: rgba(0, 0, 0, 1)">) { Field field </span>=<span style="color: rgba(0, 0, 0, 1)"> fields.get(i); LoggerOut loggerOut </span>= field.getAnnotation(LoggerOut.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (loggerOut == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">){ </span><span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">; } String fieldName </span>=<span style="color: rgba(0, 0, 0, 1)"> field.getName(); Object value </span>=<span style="color: rgba(0, 0, 0, 1)"> fieldValueMap.get(fieldName).get(); </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (isFileOrStream(value)){ </span><span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span> XXXException("不要把日志注解标注在流或文件类型的字段上"<span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">if</span> (value <span style="color: rgba(0, 0, 255, 1)">instanceof</span> Collection || value <span style="color: rgba(0, 0, 255, 1)">instanceof</span> Map || value <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Object[]){ </span><span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">; } builder.append(QUOTES); builder.append(fieldName); builder.append(QUOTES); builder.append(</span>":"<span style="color: rgba(0, 0, 0, 1)">); builder.append(JSON.toJSONString(value)); builder.append(Symbol.COMMA); } </span><span style="color: rgba(0, 0, 255, 1)">if</span> (builder.length() > 1<span style="color: rgba(0, 0, 0, 1)">){ builder.deleteCharAt(builder.length()</span>-1<span style="color: rgba(0, 0, 0, 1)">); } builder.append(</span>"}"<span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> builder.toString(); } </span><span style="color: rgba(0, 0, 255, 1)">private</span> List<Field><span style="color: rgba(0, 0, 0, 1)"> getAllFields(Object result){ List</span><Field> fields = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList<><span style="color: rgba(0, 0, 0, 1)">(); Class</span><?> clazz =<span style="color: rgba(0, 0, 0, 1)"> result.getClass(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">向上循环 遍历父类</span> <span style="color: rgba(0, 0, 255, 1)">for</span> (; clazz != Object.<span style="color: rgba(0, 0, 255, 1)">class</span>; clazz =<span style="color: rgba(0, 0, 0, 1)"> clazz.getSuperclass()) { Field[] field </span>=<span style="color: rgba(0, 0, 0, 1)"> clazz.getDeclaredFields(); </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> (Field f : field) { f.setAccessible(</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">); fields.add(f); } } </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> fields; } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 日志输出 * </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)"> YiLiChenTu * @date 2021/8/30 10:31 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> result * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> methodLog * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> className * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> methodName * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> *</span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> logOut(Object result, LogHandler methodLog, String className, String methodName) { </span><span style="color: rgba(0, 0, 255, 1)">if</span> (result == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">){ printLog(methodLog,</span>"LogHandler-result-log====>> className:{},methodName:{},result:{}"<span style="color: rgba(0, 0, 0, 1)">, className,methodName, </span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">; } </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (isBaseTypeOrString(result)){ </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">基本数据类型或者字符串,直接输出日志</span> printLog(methodLog,"LogHandler-result-log====>> className:{},methodName:{},result:{}"<span style="color: rgba(0, 0, 0, 1)">, className, methodName, JSON.toJSONString(result)); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">; } </span><span style="color: rgba(0, 0, 255, 1)">if</span> (result <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Map){ log.warn(</span>"LogHandler-result-log====>> className:{},methodName:{},返回结果为集合类型,不打印"<span style="color: rgba(0, 0, 0, 1)">, className, methodName); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">; } </span><span style="color: rgba(0, 0, 255, 1)">if</span> (result <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Collection){ Collection</span><?> list = (Collection<?><span style="color: rgba(0, 0, 0, 1)">) result; </span><span style="color: rgba(0, 0, 255, 1)">int</span> size =<span style="color: rgba(0, 0, 0, 1)"> list.size(); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (size == 0 || isBaseTypeOrString(list.toArray()[0<span style="color: rgba(0, 0, 0, 1)">])){ printLog(methodLog,</span>"LogHandler-result-log====>> className:{},methodName:{},result:{}"<span style="color: rgba(0, 0, 0, 1)">, className, methodName, JSON.toJSONString(result)); }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { log.warn(</span>"LogHandler-result-log====>> className:{},methodName:{},返回结果为集合类型,不打印"<span style="color: rgba(0, 0, 0, 1)">, className, methodName); } </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">; } </span><span style="color: rgba(0, 0, 255, 1)">if</span> (result <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Object[]){ Object[] arr </span>=<span style="color: rgba(0, 0, 0, 1)"> (Object[]) result; </span><span style="color: rgba(0, 0, 255, 1)">if</span> (arr.length == 0 || isBaseTypeOrString(arr[0<span style="color: rgba(0, 0, 0, 1)">])){ printLog(methodLog,</span>"LogHandler-result-log====>> className:{},methodName:{},result:{}"<span style="color: rgba(0, 0, 0, 1)">, className, methodName, JSON.toJSONString(result)); }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { log.warn(</span>"LogHandler-result-log====>> className:{},methodName:{},返回结果为对象数组,不打印"<span style="color: rgba(0, 0, 0, 1)">, className, methodName); } </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">; } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">入参为对象,反射获取对象字段值</span> String builder =<span style="color: rgba(0, 0, 0, 1)"> paramToString(result); printLog(methodLog,</span>"LogHandler-result-log====>> className:{},methodName:{},result:{}"<span style="color: rgba(0, 0, 0, 1)">, className,methodName, builder); } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 判断是否为文件或者流类型 * </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)"> YiLiChenTu * @date 2021/8/30 10:32 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> obj * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> *</span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> isFileOrStream(Object obj){ </span><span style="color: rgba(0, 0, 255, 1)">return</span> obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> InputStreamSource </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> InputStreamSource[] </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> File </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> File[] </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> InputStream </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> InputStream[]; } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 判断是否基本数据类型或者字符串类型 * </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)"> YiLiChenTu * @date 2021/8/30 10:32 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> obj * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> *</span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> isBaseTypeOrString(Object obj){ </span><span style="color: rgba(0, 0, 255, 1)">return</span> obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Byte </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Short </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Integer </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Long </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Character </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Float </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Double </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> Boolean </span>|| obj <span style="color: rgba(0, 0, 255, 1)">instanceof</span><span style="color: rgba(0, 0, 0, 1)"> String; } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 根据日志级别,打印不同级别的日志 * </span><span style="color: rgba(128, 128, 128, 1)">@author</span><span style="color: rgba(0, 128, 0, 1)"> YiLiChenTu * @date 2021/8/30 10:32 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> logHandler * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> formatStr * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> formats * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> *</span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> printLog(LogHandler logHandler, String formatStr, Object... formats){ </span><span style="color: rgba(0, 0, 255, 1)">if</span> (logHandler.value() ==<span style="color: rgba(0, 0, 0, 1)"> LoggerLevel.INFO){ log.info(formatStr,formats); }</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (logHandler.value() ==<span style="color: rgba(0, 0, 0, 1)"> LoggerLevel.DEBUG){ log.debug(formatStr,formats); }</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (logHandler.value() ==<span style="color: rgba(0, 0, 0, 1)"> LoggerLevel.WARN){ log.warn(formatStr,formats); }</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (logHandler.value() ==<span style="color: rgba(0, 0, 0, 1)"> LoggerLevel.TRACE){ log.warn(formatStr,formats); } }}
讯享网


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/205570.html