如何高效开发管理后台操作日志功能,实现日志记录与查询的便捷性?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1598个文字,预计阅读时间需要7分钟。
1. 功能分析 1.1 查询列表 1.1.1 页面效果 1.1.2 功能需求 分页查询默认查10条,每页从第1条开始查询 日志仅提供查询操作、搜索条件、日志来源 搜索来源:精准搜索 请求IP:精准搜索 点击搜索按钮是按精准搜索执行
1.功能分析
1.1. 查询列表
1.1.1. 页面效果
1.1.2. 功能要求
- 分页查询默认查询10条每页从第1页开始查询
- 日志只提供查询操作
- 搜索条件
- 日志来源:精准搜索
- 请求ip:精准搜索
- 点击搜索按钮是按照录入的搜索条件进行查询数据并渲染
- 点击重置按钮的时候清空搜索条件,并重新渲染数据
1.2.插入日志
1.2.1. 功能要求
- 日志参数包含:请求ip,请求地址,浏览器信息(如果无则为空),请求时间,请求来源(管理后台/博客前台),请求方法,模块信息,请求参数,响应结果,响应时间,响应时长(s),方法描述,日志类型(新增/修改等等),创建时间,创建人编号(如果为客户端访问则填充ip信息),创建人名称(如果为客户端访问则填充ip信息)
1.3查看详情
1.3.1. 页面效果
1.3.2. 功能要求
- 页面仅查看无法进行操作
2.功能实现
2.1. 初期准备
2.1.1. 创建数据库 zh_log_info
CREATE TABLE `zh_log_info` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`request_ip` varchar(40) DEFAULT NULL COMMENT '请求ip',
`request_url` varchar(255) DEFAULT NULL COMMENT '请求地址',
`request_browser` varchar(255) DEFAULT NULL COMMENT '日志请求浏览器',
`request_source` varchar(40) DEFAULT NULL COMMENT '请求来源 manager管理后台 portal博客前台',
`request_method` varchar(255) DEFAULT NULL COMMENT '请求方法',
`request_params` text COMMENT '请求参数',
`request_result` longtext COMMENT '请求响应结果',
`request_start_time` datetime DEFAULT NULL COMMENT '请求开始时间',
`request_end_time` datetime DEFAULT NULL COMMENT '响应时间/请求结束时间',
`response_interval` bigint DEFAULT NULL COMMENT '响应时长(s)',
`log_type` varchar(40) DEFAULT NULL COMMENT '日志类型(类型里面的value)',
`log_identifying` varchar(40) DEFAULT NULL COMMENT '日志标识(类型里面的key)',
`modual_info` varchar(100) DEFAULT NULL COMMENT '模块信息/请求模块',
`method_desc` varchar(255) DEFAULT NULL COMMENT '方法描述',
`method_type` varchar(255) DEFAULT NULL COMMENT '请求方法类别 GET/POST/PUT/DELETE',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_user_code` varchar(255) DEFAULT NULL COMMENT '创建人标识',
`create_user_name` varchar(255) DEFAULT NULL COMMENT '创建人名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='日志记录表';
2.1.2. 创建控制层LogInfoController
package com.zhuhuo.modual.controller.manager;
import com.zhuhuo.modual.service.LogInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping(value = "/m/logInfo")
public class LogInfoController {
@Autowired
private LogInfoService logInfoService;
}
2.1.3. 创建实体映射LogInfo
package com.zhuhuo.modual.entity;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Id;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "zh_log_info")
public class LogInfo implements Serializable {
/**
* id
*/
@Id
private Long id;
/**
* 请求ip
*/
private String requestIp;
/**
* 请求地址
*/
private String requestUrl;
/**
* 日志请求浏览器
*/
private String requestBrowser;
/**
* 请求来源 1管理后台 2博客前台
*/
private Byte requestSource;
/**
* 请求方法
*/
private String requestMethod;
/**
* 请求参数
*/
private String requestParams;
/**
* 请求响应结果
*/
private String requestResult;
/**
* 请求开始时间
*/
private Date requestStartTime;
/**
* 响应时间/请求结束时间
*/
private Date requestEndTime;
/**
* 响应时长(s)
*/
private Integer responseInterval;
/**
* 日志类型(类型里面的value)
*/
private String logType;
/**
* 日志标识(类型里面的key)
*/
private String logIdentifying;
/**
* 模块信息/请求模块
*/
private String modualInfo;
/**
* 方法描述
*/
private String methodDesc;
/**
* 请求方法类别 GET/POST/PUT/DELETE
*/
private String methodType;
/**
* 创建时间
*/
private Date createTime;
/**
* 创建人标识
*/
private String createUserCode;
/**
* 创建人名称
*/
private String createUserName;
}
2.1.4. 创建LogInfoMapper, LogInfoMapper.xml
package com.zhuhuo.modual.mapper;
import com.zhuhuo.core.frame.mapper.BasicsMapper;
import com.zhuhuo.modual.entity.LogInfo;
public interface LogInfoMapper extends BasicsMapper<LogInfo>{
}
<resultMap id="BaseResultMap" type="com.zhuhuo.modual.entity.LogInfo">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="request_ip" property="requestIp" jdbcType="VARCHAR"/>
<result column="request_url" property="requestUrl" jdbcType="VARCHAR"/>
<result column="request_browser" property="requestBrowser" jdbcType="VARCHAR"/>
<result column="request_source" property="requestSource" jdbcType="VARCHAR"/>
<result column="request_method" property="requestMethod" jdbcType="VARCHAR"/>
<result column="request_params" property="requestParams" jdbcType="LONGVARCHAR"/>
<result column="request_result" property="requestResult" jdbcType="VARCHAR"/>
<result column="request_start_time" property="requestStartTime" jdbcType="TIMESTAMP"/>
<result column="request_end_time" property="requestEndTime" jdbcType="TIMESTAMP"/>
<result column="response_interval" property="responseInterval" jdbcType="BIGINT"/>
<result column="log_type" property="logType" jdbcType="VARCHAR"/>
<result column="log_identifying" property="logIdentifying" jdbcType="VARCHAR"/>
<result column="modual_info" property="modualInfo" jdbcType="VARCHAR"/>
<result column="method_desc" property="methodDesc" jdbcType="VARCHAR"/>
<result column="method_type" property="methodType" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="create_user_code" property="createUserCode" jdbcType="VARCHAR"/>
<result column="create_user_name" property="createUserName" jdbcType="VARCHAR"/>
</resultMap>
<sql id="base_column_list">
id, request_ip, request_url, request_browser, request_source, request_method, request_params,
request_result,request_start_time, request_end_time, response_interval, log_type, log_identifying,
modual_info, method_desc,method_type, create_time, create_user_code, create_user_name
</sql>
2.1.5. 创建LogInfoService ,LogInfoServiceImpl
package com.zhuhuo.modual.service;
public interface LogInfoService {
}
package com.zhuhuo.modual.service.impl;
import com.zhuhuo.modual.service.LogInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("logInfoService")
public class LogInfoServiceImpl implements LogInfoService {
@Autowired
private LogInfoMapper logInfoMapper;
}
2.1. 添加日志
2.1.1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
2.1.2 创建日志枚举LogType
@Getter
@AllArgsConstructor
public enum LogType {
/**
* 新增
*/
INSERT("insert","新增"),
/**
* 修改
*/
UPDATE("update","修改"),
/**
* 删除
*/
DELETE("delete","删除"),
/**
* 查看
*/
VIEW("view","查看"),
/**
* 默认的
*/
DEFAULTS("default","默认"),
;
/**
* 枚举标识
*/
private String code;
/**
* 枚举描述
*/
private String desc;
}
2.1.3 创建枚举LogSource
@Getter
@AllArgsConstructor
public enum LogSource {
/**
* 管理后台枚举
*/
MANAGER("manager","管理后台"),
/**
* 博客前台枚举
*/
PORTAL("portal","博客前台");
/**
* 枚举标识
*/
private String code;
/**
* 枚举描述
*/
private String desc;
}
2.1.4 创建注解ActionLog
package com.zhuhuo.core.logs.annotation;
import com.zhuhuo.core.logs.enums.LogSource;
import com.zhuhuo.core.logs.enums.LogType;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ActionLog {
/**
* 模块相关
* @return
*/
String modual() default "";
/**
* 方法描述
* @return
*/
String methodDesc() default "";
/**
* 日志请求来源
* @return
*/
LogSource source() default LogSource.MANAGER;
/**
* 日志类别
* @return
*/
LogType logtype() default LogType.DEFAULTS;
}
2.1.5 创建切面LogAspect
package com.zhuhuo.core.logs.aspect;
import cn.hutool.www.1234xp.com/binhai.html 欢迎留下您的宝贵建议】
本文共计1598个文字,预计阅读时间需要7分钟。
1. 功能分析 1.1 查询列表 1.1.1 页面效果 1.1.2 功能需求 分页查询默认查10条,每页从第1条开始查询 日志仅提供查询操作、搜索条件、日志来源 搜索来源:精准搜索 请求IP:精准搜索 点击搜索按钮是按精准搜索执行
1.功能分析
1.1. 查询列表
1.1.1. 页面效果
1.1.2. 功能要求
- 分页查询默认查询10条每页从第1页开始查询
- 日志只提供查询操作
- 搜索条件
- 日志来源:精准搜索
- 请求ip:精准搜索
- 点击搜索按钮是按照录入的搜索条件进行查询数据并渲染
- 点击重置按钮的时候清空搜索条件,并重新渲染数据
1.2.插入日志
1.2.1. 功能要求
- 日志参数包含:请求ip,请求地址,浏览器信息(如果无则为空),请求时间,请求来源(管理后台/博客前台),请求方法,模块信息,请求参数,响应结果,响应时间,响应时长(s),方法描述,日志类型(新增/修改等等),创建时间,创建人编号(如果为客户端访问则填充ip信息),创建人名称(如果为客户端访问则填充ip信息)
1.3查看详情
1.3.1. 页面效果
1.3.2. 功能要求
- 页面仅查看无法进行操作
2.功能实现
2.1. 初期准备
2.1.1. 创建数据库 zh_log_info
CREATE TABLE `zh_log_info` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`request_ip` varchar(40) DEFAULT NULL COMMENT '请求ip',
`request_url` varchar(255) DEFAULT NULL COMMENT '请求地址',
`request_browser` varchar(255) DEFAULT NULL COMMENT '日志请求浏览器',
`request_source` varchar(40) DEFAULT NULL COMMENT '请求来源 manager管理后台 portal博客前台',
`request_method` varchar(255) DEFAULT NULL COMMENT '请求方法',
`request_params` text COMMENT '请求参数',
`request_result` longtext COMMENT '请求响应结果',
`request_start_time` datetime DEFAULT NULL COMMENT '请求开始时间',
`request_end_time` datetime DEFAULT NULL COMMENT '响应时间/请求结束时间',
`response_interval` bigint DEFAULT NULL COMMENT '响应时长(s)',
`log_type` varchar(40) DEFAULT NULL COMMENT '日志类型(类型里面的value)',
`log_identifying` varchar(40) DEFAULT NULL COMMENT '日志标识(类型里面的key)',
`modual_info` varchar(100) DEFAULT NULL COMMENT '模块信息/请求模块',
`method_desc` varchar(255) DEFAULT NULL COMMENT '方法描述',
`method_type` varchar(255) DEFAULT NULL COMMENT '请求方法类别 GET/POST/PUT/DELETE',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_user_code` varchar(255) DEFAULT NULL COMMENT '创建人标识',
`create_user_name` varchar(255) DEFAULT NULL COMMENT '创建人名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='日志记录表';
2.1.2. 创建控制层LogInfoController
package com.zhuhuo.modual.controller.manager;
import com.zhuhuo.modual.service.LogInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping(value = "/m/logInfo")
public class LogInfoController {
@Autowired
private LogInfoService logInfoService;
}
2.1.3. 创建实体映射LogInfo
package com.zhuhuo.modual.entity;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Id;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "zh_log_info")
public class LogInfo implements Serializable {
/**
* id
*/
@Id
private Long id;
/**
* 请求ip
*/
private String requestIp;
/**
* 请求地址
*/
private String requestUrl;
/**
* 日志请求浏览器
*/
private String requestBrowser;
/**
* 请求来源 1管理后台 2博客前台
*/
private Byte requestSource;
/**
* 请求方法
*/
private String requestMethod;
/**
* 请求参数
*/
private String requestParams;
/**
* 请求响应结果
*/
private String requestResult;
/**
* 请求开始时间
*/
private Date requestStartTime;
/**
* 响应时间/请求结束时间
*/
private Date requestEndTime;
/**
* 响应时长(s)
*/
private Integer responseInterval;
/**
* 日志类型(类型里面的value)
*/
private String logType;
/**
* 日志标识(类型里面的key)
*/
private String logIdentifying;
/**
* 模块信息/请求模块
*/
private String modualInfo;
/**
* 方法描述
*/
private String methodDesc;
/**
* 请求方法类别 GET/POST/PUT/DELETE
*/
private String methodType;
/**
* 创建时间
*/
private Date createTime;
/**
* 创建人标识
*/
private String createUserCode;
/**
* 创建人名称
*/
private String createUserName;
}
2.1.4. 创建LogInfoMapper, LogInfoMapper.xml
package com.zhuhuo.modual.mapper;
import com.zhuhuo.core.frame.mapper.BasicsMapper;
import com.zhuhuo.modual.entity.LogInfo;
public interface LogInfoMapper extends BasicsMapper<LogInfo>{
}
<resultMap id="BaseResultMap" type="com.zhuhuo.modual.entity.LogInfo">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="request_ip" property="requestIp" jdbcType="VARCHAR"/>
<result column="request_url" property="requestUrl" jdbcType="VARCHAR"/>
<result column="request_browser" property="requestBrowser" jdbcType="VARCHAR"/>
<result column="request_source" property="requestSource" jdbcType="VARCHAR"/>
<result column="request_method" property="requestMethod" jdbcType="VARCHAR"/>
<result column="request_params" property="requestParams" jdbcType="LONGVARCHAR"/>
<result column="request_result" property="requestResult" jdbcType="VARCHAR"/>
<result column="request_start_time" property="requestStartTime" jdbcType="TIMESTAMP"/>
<result column="request_end_time" property="requestEndTime" jdbcType="TIMESTAMP"/>
<result column="response_interval" property="responseInterval" jdbcType="BIGINT"/>
<result column="log_type" property="logType" jdbcType="VARCHAR"/>
<result column="log_identifying" property="logIdentifying" jdbcType="VARCHAR"/>
<result column="modual_info" property="modualInfo" jdbcType="VARCHAR"/>
<result column="method_desc" property="methodDesc" jdbcType="VARCHAR"/>
<result column="method_type" property="methodType" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="create_user_code" property="createUserCode" jdbcType="VARCHAR"/>
<result column="create_user_name" property="createUserName" jdbcType="VARCHAR"/>
</resultMap>
<sql id="base_column_list">
id, request_ip, request_url, request_browser, request_source, request_method, request_params,
request_result,request_start_time, request_end_time, response_interval, log_type, log_identifying,
modual_info, method_desc,method_type, create_time, create_user_code, create_user_name
</sql>
2.1.5. 创建LogInfoService ,LogInfoServiceImpl
package com.zhuhuo.modual.service;
public interface LogInfoService {
}
package com.zhuhuo.modual.service.impl;
import com.zhuhuo.modual.service.LogInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("logInfoService")
public class LogInfoServiceImpl implements LogInfoService {
@Autowired
private LogInfoMapper logInfoMapper;
}
2.1. 添加日志
2.1.1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
2.1.2 创建日志枚举LogType
@Getter
@AllArgsConstructor
public enum LogType {
/**
* 新增
*/
INSERT("insert","新增"),
/**
* 修改
*/
UPDATE("update","修改"),
/**
* 删除
*/
DELETE("delete","删除"),
/**
* 查看
*/
VIEW("view","查看"),
/**
* 默认的
*/
DEFAULTS("default","默认"),
;
/**
* 枚举标识
*/
private String code;
/**
* 枚举描述
*/
private String desc;
}
2.1.3 创建枚举LogSource
@Getter
@AllArgsConstructor
public enum LogSource {
/**
* 管理后台枚举
*/
MANAGER("manager","管理后台"),
/**
* 博客前台枚举
*/
PORTAL("portal","博客前台");
/**
* 枚举标识
*/
private String code;
/**
* 枚举描述
*/
private String desc;
}
2.1.4 创建注解ActionLog
package com.zhuhuo.core.logs.annotation;
import com.zhuhuo.core.logs.enums.LogSource;
import com.zhuhuo.core.logs.enums.LogType;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ActionLog {
/**
* 模块相关
* @return
*/
String modual() default "";
/**
* 方法描述
* @return
*/
String methodDesc() default "";
/**
* 日志请求来源
* @return
*/
LogSource source() default LogSource.MANAGER;
/**
* 日志类别
* @return
*/
LogType logtype() default LogType.DEFAULTS;
}
2.1.5 创建切面LogAspect
package com.zhuhuo.core.logs.aspect;
import cn.hutool.www.1234xp.com/binhai.html 欢迎留下您的宝贵建议】

