Guns项目日志系统业务操作日志与登录日志的完整实现【免费下载链接】gunsGuns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc shiro 分页插件PageHelper 通用Mapper beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架.项目地址: https://gitcode.com/gh_mirrors/gun/gunsGuns是一个基于SpringBoot的后台管理系统其日志系统设计精巧提供了完整的业务操作日志和登录日志记录功能。对于新手和普通用户来说理解Guns的日志实现机制能帮助你更好地监控系统运行状态追踪用户操作行为提升系统安全性和可维护性。 为什么需要完善的日志系统在后台管理系统中日志系统扮演着至关重要的角色。它不仅能帮助我们追踪系统运行状态还能记录用户操作行为为系统审计、故障排查和安全分析提供重要依据。Guns项目通过一套完整的日志记录机制实现了业务操作日志和登录日志的自动化记录。️ Guns日志系统的架构设计Guns的日志系统采用分层设计主要包含以下几个核心模块1. 日志实体层登录日志实体LoginLog.java - 记录用户登录相关信息操作日志实体OperationLog.java - 记录业务操作详情2. 数据库表结构系统使用两张核心表来存储日志信息登录日志表 (sys_login_log)CREATE TABLE sys_login_log ( id int(65) NOT NULL AUTO_INCREMENT COMMENT 主键, logname varchar(255) DEFAULT NULL COMMENT 日志名称, userid int(65) DEFAULT NULL COMMENT 管理员id, createtime datetime DEFAULT NULL COMMENT 创建时间, succeed varchar(255) DEFAULT NULL COMMENT 是否执行成功, message text COMMENT 具体消息, ip varchar(255) DEFAULT NULL COMMENT 登录ip, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT216 DEFAULT CHARSETutf8 COMMENT登录记录;操作日志表 (sys_operation_log)CREATE TABLE sys_operation_log ( id int(65) NOT NULL AUTO_INCREMENT COMMENT 主键, logtype varchar(255) DEFAULT NULL COMMENT 日志类型, logname varchar(255) DEFAULT NULL COMMENT 日志名称, userid int(65) DEFAULT NULL COMMENT 用户id, classname varchar(255) DEFAULT NULL COMMENT 类名称, method text COMMENT 方法名称, createtime datetime DEFAULT NULL COMMENT 创建时间, succeed varchar(255) DEFAULT NULL COMMENT 是否成功, message text COMMENT 备注, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT550 DEFAULT CHARSETutf8 COMMENT操作日志;⚙️ 核心实现机制1. 业务日志注解驱动Guns采用注解驱动的方式记录业务操作日志。通过在Controller方法上添加BussinessLog注解系统会自动记录该方法的调用信息。BussinessLog注解定义Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface BussinessLog { String value() default ; // 业务名称如修改菜单 String key() default id; // 被修改实体的唯一标识 String dict() default SystemDict; // 字典配置 }使用示例BussinessLog(value 添加角色, key name, dict Dict.RoleDict) RequestMapping(value /add) ResponseBody public Object add(Role role) { // 业务逻辑 }2. AOP切面自动拦截Guns通过AOP切面技术自动拦截带有BussinessLog注解的方法实现无侵入式的日志记录。核心切面类LogAop.java 实现了以下功能拦截所有带有BussinessLog注解的方法自动获取当前登录用户信息记录方法执行前后状态异步保存日志到数据库3. 异步日志处理机制为避免日志记录影响系统性能Guns采用异步方式处理日志日志管理器LogManager.java 使用线程池异步执行日志任务public class LogManager { private final int OPERATE_DELAY_TIME 10; private ScheduledThreadPoolExecutor executor new ScheduledThreadPoolExecutor(10); public void executeLog(TimerTask task) { executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); } }日志任务工厂LogTaskFactory.java 提供了多种日志创建方法loginLog()- 创建登录日志exitLog()- 创建退出日志bussinessLog()- 创建业务日志exceptionLog()- 创建异常日志 日志类型分类Guns定义了清晰的日志类型枚举便于分类管理日志类型枚举LogType.javapublic enum LogType { LOGIN(登录日志), LOGIN_FAIL(登录失败日志), EXIT(退出日志), EXCEPTION(异常日志), BUSSINESS(业务日志); }日志状态枚举LogSucceed.javapublic enum LogSucceed { SUCCESS(成功), FAIL(失败); } 快速配置使用指南1. 启用业务日志记录在需要记录日志的Controller方法上添加BussinessLog注解BussinessLog(value 用户管理, key userId, dict Dict.UserDict) RequestMapping(/user/update) ResponseBody public Object updateUser(User user) { // 更新用户逻辑 return SUCCESS_TIP; }2. 自定义日志内容通过BussinessLog注解的三个属性可以自定义日志内容value业务操作描述key操作实体的关键字段dict字典配置用于字段名称映射3. 查看日志记录系统提供了专门的日志管理界面业务日志访问/log路径登录日志访问/loginLog路径 高级功能特性1. 登录失败监控Guns会自动记录登录失败的尝试包括账号密码错误验证码错误账号被冻结其他认证异常登录失败日志记录ExceptionHandler(CredentialsException.class) public String credentials(CredentialsException e, Model model) { String username getRequest().getParameter(username); LogManager.me().executeLog(LogTaskFactory.loginLog(username, 账号密码错误, getIp())); // 处理逻辑 }2. 操作对比功能对于修改类操作Guns会自动对比修改前后的数据差异// 在LogAop中实现数据对比 if (bussinessName.indexOf(修改) ! -1 || bussinessName.indexOf(编辑) ! -1) { Object obj1 LogObjectHolder.me().get(); // 原始数据 MapString, String obj2 HttpKit.getRequestParameters(); // 修改后数据 msg Contrast.contrastObj(dictClass, key, obj1, obj2); // 对比差异 }3. 异常日志记录系统会自动捕获并记录运行时异常ExceptionHandler(RuntimeException.class) ResponseBody public ErrorTip notFount(RuntimeException e) { LogManager.me().executeLog(LogTaskFactory.exceptionLog(ShiroKit.getUser().getId(), e)); // 异常处理逻辑 } 性能优化策略1. 异步处理机制所有日志记录操作都通过线程池异步执行避免阻塞主业务流程。2. 延迟执行日志任务延迟10毫秒执行减少对系统性能的影响。3. 线程池管理使用固定大小的线程池10个线程避免线程创建销毁的开销。️ 自定义扩展1. 扩展日志类型如需添加新的日志类型只需在LogType枚举中添加新项并在LogFactory中创建对应的日志创建方法。2. 自定义日志格式通过修改LogFactory中的日志创建方法可以自定义日志字段和格式。3. 日志存储策略系统支持将日志存储到不同的数据源只需配置相应的Mapper接口即可。 最佳实践建议关键操作必须记录对用户管理、权限变更、数据删除等关键操作务必添加日志记录日志信息要详细确保日志包含足够的信息用于问题排查定期清理旧日志通过系统提供的清空日志功能定期清理过期日志监控登录异常关注登录失败日志及时发现安全威胁结合业务分析利用操作日志分析用户行为模式优化系统功能 总结Guns项目的日志系统通过简洁的设计和高效的实现为后台管理系统提供了完整的日志记录解决方案。无论是新手开发者还是有经验的系统管理员都能轻松上手使用这套日志系统。通过注解驱动、AOP切面和异步处理等技术Guns实现了无侵入式的日志记录既保证了系统的性能又提供了完整的操作追踪能力。掌握Guns的日志系统实现不仅能帮助你更好地监控系统运行状态还能为系统安全审计和故障排查提供有力支持。这套日志系统设计思路清晰实现简洁高效值得在实际项目中参考和应用。【免费下载链接】gunsGuns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc shiro 分页插件PageHelper 通用Mapper beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架.项目地址: https://gitcode.com/gh_mirrors/gun/guns创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考