首先创建一个自定义注解
@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就可以啦
分享到:
相关推荐
4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...
spring AOP 切面日志 分层打日志
Spring Mvc AOP通过注解方式拦截controller等实现日志管理
spring aop切面拦截指定类和方法实现流程日志跟踪 一般情况下,在不侵入业务代码的情况下,需要做流程日志跟踪是比较合理的 采用springaop切面思想
swagger和spring Aop日志结合 ,swagger和spring Aop日志结合 ,swagger和spring Aop日志结合 ,
下面小编就为大家分享一篇Spring Aop之AspectJ注解配置实现日志管理的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
springboot spring aop 拦截器 注解方式实现脱敏(涉及到:pom.xml -->application.properties --->启动类-->拦截器)
spring AOP基于注解来实现业务日志管理
Spring AOP--日志管理,注释齐全,欢迎大家共同交流。
利用自定义注解和spring aop和java反射机制生成用户能够读懂的日志记录。如:用户张三在2013年9月27日17:00执行了用户管理模块的用户删除功能参数为(编号:123456)各位可根据需要写入数据库或者保存到文件。
1、了解AOP的概念和作用; 2、理解AOP中的相关术语; 3、了解Spring中两种动态代理方式的区别; 4、掌握基于XML和注解的AspectJ开发。 二、 实验内容 1、按图所示的类图结构,设计接口及其实现类,并完成另外两附加...
NULL 博文链接:https://conkeyn.iteye.com/blog/2354644
Spring MVC AOP通过注解方式拦截Controller等实现日志管理demo版本2
元注解方式结合AOP,灵活记录操作日志 能够记录详细错误日志为运维提供支持 日志记录尽可能减少性能影响
下面小编就为大家分享一篇spring AOP自定义注解方式实现日志管理的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
SpringMVC利用AOP实现自定义注解记录日志
Flex整合Spring实现aop日志管理 实现记录操作的日志
本文我们通过Spring AOP和Java的自定义注解来实现日志的插入功能,非常不错,具有一定的参考借鉴价值,需要的朋友一起看看吧
Spring AOP(面向切面编程)是Java高级编程中的重要...Spring AOP的配置方式多样,包括基于接口的配置、schema-based配置和@AspectJ注解配置。通过这些配置方式,开发者可以灵活地实现AOP功能,满足不同场景下的需求。
时间过的真快,转眼就一年了,没想到随手写的笔记会被这么多人浏览,不想误人子弟,于是整理了一个优化版。感谢各位同道的支持!