1,创建Log表
ID | 主键 |
USER | 操作人 |
OPERATION | 操作 |
METHOD | 操作方法路径 |
IP | 操作IP地址 |
USERAGENT | 用户代理 |
PARAMS | 操作提交的数据 |
EXCEPTION | 异常信息 |
BEGINDATE | 操作时间 |
URL | 请求地址URL |
URI | 资源标志 |
REQUESTTYPE | Get/post |
OSNAME | 操作系统名称 |
OSVERSION | 操作系统版本 |
... | ... |
2,自定义注解
/**
* 自定义注解类
*/
@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上
@Retention(RetentionPolicy.RUNTIME) //注解
public @interface MyLog {
String desc() default ""; //定义返回参数
}
3,Log entity ,service,dao, 略。。。。
4,
/**
* 系统日志:切面处理类
*/
@Aspect
@Component
public class LogAspect {
@Autowired
private LogService LogService;
// 定义切点 @Pointcut
// 在注解的位置切入代码
//reg 处放你定义的注解路径
@Pointcut("@annotation(reg)
public void logPoinCut() {
}
// 切面 配置通知
@After("logPoinCut()")
public void saveLog(JoinPoint joinPoint) {
// 保存日志
User user = (User) UserUtils.getUser();
if (user != null) {
Log Log = new Log();
// 从切面织入点处通过反射机制获取织入点处的方法
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
// 获取切入点所在的方法
Method method = signature.getMethod();
// 获取操作
MyLog annotation = signature.getMethod().getAnnotation(MyLog.class);
String desc = "";
if (annotation != null) {
desc = annotation.desc();
}
Log.setOperation(desc);
// 获取请求的类名
String className = joinPoint.getTarget().getClass().getName();
// 获取请求的方法名
String methodName = method.getName();
Log.setMethod(className + "." + methodName);
Log.setBeginDate(new Date());
// 接收到请求,记录请求内容
HttpServletRequest request =
((ServletRequestAttributes)
equestContextHolder.getRequestAttributes()).getRequest();
//客户端操作系统
Log.setOsName(System.getProperty("os.name"));
//客户端操作系统版本
Log.setOsVersion(System.getProperty("os.version"));
//客户端浏览器的版本类型
Log.setUserAgent(request.getHeader("user-agent"));
//请求ip
Log.setIp(IpUtils.getIpAddr(request)+" "+request.getRemoteAddr());
//请求url
Log.setUrl(request.getRequestURL().toString());
//请求uri
Log.setUri(request.getRequestURI());
//请求方式 get,post等
Log.setRequestType(request.getMethod());
Log.setParams(request.getParameterMap());
Log.setQyId(user.getQyId());
// 调用service保存Log实体类到数据库
LogService.save(Log);
}
}
}
5,
@RequiresPermissions("user")
@RequestMapping(value = { "list" })
@MyLog(desc = "调用")
public viod list(SysGzhzxx args,Model model) {
}
6,如果没用 查看是否 aop 的加包是否存在,
7,jar包存在 查看Application中是否开启@EnableAspectJAutoProxy注解