首先创建一个自定义注解
- @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就可以啦