ssm 实现日志 用aspectj_SSM框架把日志信息保存到数据库过程详解

  • Post author:
  • Post category:其他


1)在service层和mapper层中写一个插入方法和查询方法;

我们先写一个日志类;定义属性;并且要在数据库中建好表;

package entity;

public class Log {

private Integer id;

private Integer logtype;

private String description;

private String param;

public Log(){

}

public Log(Integer id, Integer logtype, String description, String param) {

this.id = id;

this.logtype = logtype;

this.description = description;

this.param = param;

}

@Override

public String toString() {

return “Log{” +

“id=” + id +

“, logtype=” + logtype +

“, description='” + description + ‘\” +

“, param='” + param + ‘\” +

‘}’;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public Integer getLogtype() {

return logtype;

}

public void setLogtype(Integer logtype) {

this.logtype = logtype;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public String getParam() {

return param;

}

public void setParam(String param) {

this.param = param;

}

}

该写方法了

1、logService.java页面;

public interface LogService {

int insert(Log log);

List findAll();

}

2、logServiceImpl.java页面;

@Service

public class LogServiceImpl implements LogService {

@Autowired

private LogMapper logMapper;

@Override

public int insert(Log log) {

int i=logMapper.insert(log);

return i;

}

@Override

public List findAll() {

List logs=logMapper.findAll();

return logs;

}

}

3、logMapper.java页面:

public interface LogMapper {

int insert(Log log);

List findAll();

}

4、logMapper.xml页面;

select seq_logaspect.nextval from dual

insert into logaspect(id,logtype,description,param) values (#{id},#{logtype},#{description},#{param})

select * from logaspect

5、由于我们打印日志是通过切面,所以我们写一个切面类;

package aop;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import entity.Log;

import entity.Student;

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.Signature;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.aspectj.lang.annotation.Pointcut;

import org.aspectj.lang.reflect.MethodSignature;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import org.springframework.web.context.request.RequestContextHolder;

import org.springframework.web.context.request.ServletRequestAttributes;

import service.LogService;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;

import java.util.Map;

@Component//对象由spring管理

@Aspect//切面注解

public class LogAspect {

@Autowired

private LogService logService;

private static final Logger LOGGER = LogManager.getLogger(LogAspect.class);

//定义切入点,切入到添加了LogData注解的方法上

@Pointcut(“@annotation(aop.LogData)”)

public void pointCut(){

}

/**

* 记录日志的切面方法

* 在该方法中定义统一的日志记录逻辑

* @param joinPoint

*/

@Before(“pointCut()”)

public void log(JoinPoint joinPoint){

System.out.println(“进入日志Aspect”);

//获取到方法签名

MethodSignature signature= (MethodSignature) joinPoint.getSignature();

//获取到连接点方法对象

Method method=signature.getMethod();

//获取方法上面特定的注解

LogData annotation=method.getAnnotation(LogData.class);

LogType logType=annotation.logType();

String description=annotation.description();

LOGGER.info(“获取到注解内容:logType=”+logType.getType()

+”,description:”+description);

//aop中获取request

ServletRequestAttributes requestAttributes= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

HttpServletRequest request=requestAttributes.getRequest();

HttpSession session=request.getSession();

//获取操作人

Student student= (Student) session.getAttribute(“student”);

//获取请求数据

Map parameterMap=request.getParameterMap();

//将对象转换成json字符串==>存储到请求数据字段中

//jackSon json字符串操作

ObjectMapper objectMapper=new ObjectMapper();

try {

String s=objectMapper.writeValueAsString(parameterMap);

LOGGER.info(“请求数据:”+s);

Log log = new Log();

log.setLogtype(logType.getType());

log.setDescription(description);

log.setParam(s);

logService.insert(log);

} catch (JsonProcessingException e) {

e.printStackTrace();

}

//todo 将日志信息保存到数据库 LogController service mapper jsp

}

}

6、写一个loglist.jsp页面来展示信息;

用户列表

IDLOGTYPEDESCRIPTIONPARAM

${log.id}${log.logtype}${log.description}${log.param}


返回list页面

7、最后,我们写一个控制层的方法;

package controller;

import aop.LogData;

import aop.LogType;

import com.github.pagehelper.PageHelper;

import com.github.pagehelper.PageInfo;

import entity.Log;

import entity.Student;

import mapper.StudentsMapper;

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import service.LogService;

import service.StudentService;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import java.util.HashMap;

import java.util.List;

/**

* 控制层调service,service调dao层

*/

@Controller

@RequestMapping(“/user”)

public class UserController {

//定义日志对象

//private static final Logger logger= LogManager.getLogger(UserController.class);

@Autowired

private StudentService studentService;

@Autowired

private LogService logService;

@RequestMapping(“/list”) //@ModelAttribute(name = “params”) :向request域中存值

public String list(ModelMap modelMap,@RequestParam HashMap map){

//定义debug级别的日志

//logger.debug(“前台传递的查询条件:”+map);

//logger.info(“info级别日志:”+map);

System.out.println(“前台传递的查询条件:”+map);

//List students = studentService.findAll();

// List students = studentService.findByMap(map);

// modelMap.put(“students”,students);

PageInfo page = studentService.findByPage(map);

//记录error级别日志

//logger.error(“查询到分页数据:”+page);

System.out.println(“查询到分页数据:”+page);

modelMap.put(“page”,page);

modelMap.put(“params”,map);//将查询条件回传到页面,用于回显查询条件

return “list.jsp”;

}

@LogData(logType = LogType.DELETE,description = “学生信息删除”)

@RequestMapping(“/delete”)

public String delete(Integer id){

studentService.delete(id);

return “redirect:list”;

}

@LogData(logType = LogType.UPDATE,description = “学生信息修改”)

@RequestMapping(“/update2”)

public String update2(Integer id,ModelMap modelMap){

Student student = studentService.selectById(id);

modelMap.put(“student”,student);

return “update.jsp”;

}

//根据是否存在id值,来判断是执行新增还是修改操作

@RequestMapping(“/update”)

public String update(Student student){

studentService.update(student);

return “redirect:list”;

}

@LogData(logType = LogType.INSERT,description = “学生信息新增”)

@RequestMapping(“/insert”)

public String insert(Student student){

studentService.insert(student);

return “redirect:list”;

}

@Autowired

private StudentsMapper studentsMapper;

@RequestMapping(“list2”)

public String list2(ModelMap modelMap){

PageHelper.startPage(1,5);

List students=studentsMapper.selectAll();

modelMap.put(“students”,students);

PageInfo pageInfo=new PageInfo<>(students);

System.out.println(pageInfo);

return “list.jsp”;

}

@RequestMapping(“/selAll”)

public String findAll(ModelMap modelMap){

List logs = logService.findAll();

modelMap.put(“logs”,logs);

return “loglist.jsp”;

}

}

测试结果,我们出来的页面效果是:

即说明打印日志成功了;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。



版权声明:本文为weixin_39553423原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。