首先创建一个自定义注解
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RecordLog {
}
然后采用spring Aop
@Component("logAround")
public class LogAroundInterceptor implements MethodInterceptor {
@Autowired
private SysLogService sysLogService;
private final Logger logger = Logger.getLogger(LogAroundInterceptor.class);
public Object invoke(MethodInvocation invocation) throws Throwable {
// TODO Auto-generated method stub
Object returnObject = invocation.proceed();
Method method = invocation.getMethod();
if (method.isAnnotationPresent(RecordLog.class)) {
Object[] arguments = invocation.getArguments();
Object saveObject = null;
SysLog sysLog = new SysLog();
if (null != arguments) {
saveObject = arguments[0];
sysLog = getSysLog(getOperaType(method.getName()), saveObject);
sysLogService.saveSysLog(sysLog);
}
}
return returnObject;
}
public int getOperaType(String methodName) {
int type = 0;
if (methodName.startsWith("save") || methodName.startsWith("add")
|| methodName.startsWith("insert")
|| methodName.startsWith("update")) {
type = 1;
} else if (methodName.startsWith("delete")
|| methodName.startsWith("del")) {
type = 2;
}
return type;
}
public SysLog getSysLog(int type, Object object) {
SysLog sysLog = new SysLog();
sysLog.setCreateTime(new Date());
StringBuffer sysContent = new StringBuffer();
if (type != 1 && type != 2) {
logger.warn("此方法不能被记录日志");
return null;
}
if (object instanceof User) {
User user = (User) object;
sysContent.append("用户:");
if (type == 1) {
sysContent.append(user.getUsername()).append("被保存.");
} else if (type == 2) {
sysContent.append(user.getDeleteUser()).append(
"删除了用户:" + user.getUniqueUserName());
}
} else if (object instanceof Tribe) {
Tribe tribe = (Tribe) object;
if (type == 1) {
sysContent.append("用户:").append(
tribe.getUser().getUniqueUserName()).append("保存了部落:")
.append(tribe.getName());
} else if (type == 2) {
sysContent.append("用户:").append(tribe.getDeleteUser()).append(
"删除了部落:").append(tribe.getUniqueTribeName());
}
} else if (object instanceof Assessment) {
Assessment assessment = (Assessment) object;
int assType = assessment.getType();
User user = assessment.getUserByUserId();
sysContent.append("用户:").append(user.getUniqueUserName()).append(
"举报了");
if (assType == 1) {
sysContent.append("资源").append(
assessment.getResource().getTitle());
} else if (assType == 2) {
sysContent.append("部落").append(
assessment.getTribeByAccTribeId().getUniqueTribeName());
} else if (assType == 3) {
sysContent.append("人").append(
assessment.getUserByUserId().getUniqueUserName());
}
} else if (object instanceof Role) {
Role role = (Role) object;
sysContent.append("用户:").append(role.getOperaUser());
if (type == 1) {
sysContent.append("保存了").append(role.getRoleName());
} else if (type == 2) {
sysContent.append("删除了").append(role.getRoleName());
}
} else if (object instanceof Resource) {
Resource res = (Resource) object;
boolean isPass = res.getAppStatus() == 1;
sysContent.append("一级审核人员:").append(res.getAppUser().getUniqueUserName());
sysContent.append("审核").append(res.getUniqueResName());
if (!isPass) {
sysContent.append("未通过");
} else if (isPass) {
sysContent.append("通过");
}
}
logger.info(sysContent.toString());
sysLog.setContent(sysContent.toString());
return sysLog;
}
}
在需要插入注解的方法上面写上@RecordLog就可以啦