/***@authorxxx
* @description 操作日志
* @date 2020/10/19*/@Servicepublic class ZyLogService extends ZyBaseService{
@AutowiredprivateZyLogMapper zyLogMapper;
@AutowiredprivateObjectMapper objectMapper;/*** @description: 保存操作日志
*@parampoint
*@paramlog
*@return: void
*@author: xxx
* @Date: 2020/10/19 15:58*/
public void saveLog(ProceedingJoinPoint point, ZyLog log) throwsJsonProcessingException {
MethodSignature signature=(MethodSignature) point.getSignature();
Method method=signature.getMethod();
com.zy.wechat.annotation.ZyLog logAnnotation= method.getAnnotation(com.zy.wechat.annotation.ZyLog.class);if (logAnnotation != null) {//注解上的描述
log.setOperation(logAnnotation.value());
}//请求的类名
String className =point.getTarget().getClass().getName();//请求的方法名
String methodName =signature.getName();
log.setMethod(className+ "." + methodName + "()");//请求的方法参数值
Object[] args =point.getArgs();//请求的方法参数名称
LocalVariableTableParameterNameDiscoverer u = newLocalVariableTableParameterNameDiscoverer();
String[] paramNames=u.getParameterNames(method);if (args != null && paramNames != null) {
StringBuilder params= newStringBuilder();
params=handleParams(params, args, Arrays.asList(paramNames));
log.setParams(params.toString());
}
log.setCreateTime(newDate());
log.setLocation(AddressUtil.getCityInfo(log.getIp()));//保存系统日志
zyLogMapper.insert(log);
}/*** @description:设置参数
*@paramparams
*@paramargs
*@paramparamNames
*@return: java.lang.StringBuilder
*@author: xxx
* @Date: 2020/10/19 15:59*/
private StringBuilder handleParams(StringBuilder params, Object[] args, List paramNames) throwsJsonProcessingException {for (int i = 0; i < args.length; i++) {if (args[i] instanceofMap) {
Set set=((Map) args[i]).keySet();
List list = new ArrayList<>();
List paramList = new ArrayList<>();for(Object key : set) {
list.add(((Map) args[i]).get(key));
paramList.add(key);
}returnhandleParams(params, list.toArray(), paramList);
}else{if (args[i] instanceofSerializable) {
Class> aClass =args[i].getClass();try{
aClass.getDeclaredMethod("toString", new Class[]{null});//如果不抛出 NoSuchMethodException 异常则存在 toString 方法 ,安全的 writeValueAsString ,否则 走 Object的 toString方法
params.append(" ").append(paramNames.get(i)).append(": ").append(objectMapper.writeValueAsString(args[i]));
}catch(NoSuchMethodException e) {
params.append(" ").append(paramNames.get(i)).append(": ").append(objectMapper.writeValueAsString(args[i].toString()));
}
}else if (args[i] instanceofMultipartFile) {
MultipartFile file=(MultipartFile) args[i];
params.append(" ").append(paramNames.get(i)).append(": ").append(file.getName());
}else{
params.append(" ").append(paramNames.get(i)).append(": ").append(args[i]);
}
}
}returnparams;
}