如何5分钟快速上手SpringBoot操作日志组件mzt-biz-log
【免费下载链接】mzt-biz-log支持Springboot,基于注解的可使用变量、可以自定义函数的通用操作日志组件项目地址: https://gitcode.com/gh_mirrors/mz/mzt-biz-log
还在为系统操作日志记录而烦恼吗?手动编写日志代码不仅繁琐,还容易出错。mzt-biz-log是一款基于注解的SpringBoot通用操作日志组件,它能帮你自动记录"谁在什么时间对什么做了什么事",让日志记录变得简单高效。
为什么你需要这个操作日志组件?
想象一下这样的场景:用户A在2025年7月19日14:30修改了订单12345的收货地址。如果没有自动化的日志记录,你需要:
- 手动获取当前用户信息
- 记录操作时间
- 对比新旧数据差异
- 格式化日志内容
- 处理异常情况
而使用mzt-biz-log,只需要一个注解:
@LogRecord(success = "更新了订单收货地址{_DIFF{#oldAddress, #newAddress}}", type = "order.update", bizNo = "{{#orderId}}") public void updateOrderAddress(Long orderId, Address oldAddress, Address newAddress) { // 业务逻辑 }传统方式 vs mzt-biz-log对比
| 对比项 | 传统手动记录 | mzt-biz-log注解方式 |
|---|---|---|
| 代码量 | 每个方法10-20行 | 只需1行注解 |
| 维护成本 | 高,每个方法都要修改 | 低,集中配置 |
| 一致性 | 难以保证格式统一 | 统一模板管理 |
| 可读性 | 业务逻辑与日志代码混杂 | 业务代码清晰 |
| 扩展性 | 修改困难 | 支持自定义函数扩展 |
核心特性展示
🎯 智能对象差异对比
自动对比修改前后的对象,生成清晰易懂的变更日志:
更新了订单【收货地址】从【北京市海淀区】修改为【上海市浦东新区】; 【订单状态】从【待发货】修改为【已发货】; 【备注信息】添加了【客户要求加急】🔧 灵活的自定义函数
内置丰富的函数库,支持自定义扩展:
@Component public class UserParseFunction implements IParseFunction { @Override public String functionName() { return "USER"; } @Override public String apply(Object value) { // 将用户ID转换为用户名 return userService.getUserNameById(value.toString()); } }使用方式:{USER{#userId}}→ "张三(1001)"
📊 多维度日志分类
支持按业务类型、操作子类型分类,方便后续查询分析:
@LogRecord( success = "{{#operator}}审核了订单{ORDER{#orderId}},审核结果:{{#result}}", type = "order.audit", subType = "MANAGER_OPERATION", // 管理员操作 bizNo = "{{#orderId}}" )5分钟快速开始指南
步骤1:添加依赖
<dependency> <groupId>io.github.mouzt</groupId> <artifactId>bizlog-sdk</artifactId> <version>3.0.7-SNAPSHOT</version> </dependency>步骤2:启用日志功能
在SpringBoot启动类添加注解:
@SpringBootApplication @EnableLogRecord(tenant = "your-app-name") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }步骤3:开始记录日志
在需要记录日志的方法上添加注解:
@Service public class OrderService { @LogRecord( success = "创建了订单,订单号:{{#order.orderNo}},金额:{{#order.amount}}元", fail = "创建订单失败,原因:{{#_errorMsg}}", type = "order.create", bizNo = "{{#order.orderNo}}" ) public Order createOrder(OrderDTO orderDTO) { // 业务逻辑 return orderRepository.save(convertToOrder(orderDTO)); } }步骤4:配置存储方式(可选)
默认支持数据库存储,也可扩展其他存储:
@Service public class CustomLogRecordService implements ILogRecordService { @Override public void record(LogRecord logRecord) { // 存储到ES、消息队列或文件系统 log.info("操作日志:{}", logRecord); } }高级应用场景
场景1:敏感字段过滤
某些字段(如密码、手机号)不应该记录到日志中:
public class User { private Long id; private String username; @DIffLogIgnore // 忽略该字段的差异记录 private String password; @DiffLogField(name = "手机号", function = "PHONE_MASK") // 自定义脱敏函数 private String phone; }场景2:条件日志记录
只有满足特定条件时才记录日志:
@LogRecord( success = "调整了用户{{#userId}}的权限", type = "user.permission", condition = "{{#oldRole != #newRole}}" // 只有角色变化时才记录 ) public void updateUserRole(Long userId, String oldRole, String newRole) { // 更新逻辑 }场景3:事务一致性
确保日志与业务操作在同一事务中:
@EnableLogRecord(tenant = "order-system", joinTransaction = true) @EnableTransactionManagement(order = 0) // 事务优先级更高 public class OrderApplication { // 配置类 }项目结构概览
mzt-biz-log采用模块化设计,结构清晰:
bizlog-sdk/ # 核心SDK ├── src/main/java/com/mzt/logapi/ │ ├── starter/annotation/ # 注解定义 │ │ └── LogRecord.java # 核心注解 │ ├── service/ # 服务接口 │ │ ├── ILogRecordService.java │ │ └── IParseFunction.java # 自定义函数接口 │ └── support/aop/ # AOP实现 │ └── LogRecordInterceptor.java bizlog-server/ # 示例应用 ├── src/main/java/com/mzt/logserver/ │ ├── impl/OrderServiceImpl.java # 使用示例 │ └── function/ # 自定义函数示例 │ └── OrderParseFunction.java常见问题解答
❓ 性能影响大吗?
组件采用AOP实现,性能开销极小。支持异步记录日志,几乎不影响业务响应时间。
❓ 支持哪些SpringBoot版本?
支持SpringBoot 2.x和3.x版本,兼容性良好。
❓ 如何自定义日志格式?
实现IDiffItemsToLogContentService接口即可完全控制日志输出格式。
❓ 日志存储在哪里?
默认支持数据库存储,也支持扩展存储到ES、消息队列或文件系统。
立即开始使用
mzt-biz-log已经在多个生产环境中稳定运行,帮助团队节省了大量日志开发时间。它的设计理念是"约定优于配置",让你专注于业务逻辑,而不是繁琐的日志代码。
克隆仓库开始体验:
git clone https://gitcode.com/gh_mirrors/mz/mzt-biz-log查看完整示例:bizlog-server/src/main/java/com/mzt/logserver/impl/OrderServiceImpl.java
加入技术社区,与开发者一起交流使用心得,共同打造更好的操作日志解决方案!
【免费下载链接】mzt-biz-log支持Springboot,基于注解的可使用变量、可以自定义函数的通用操作日志组件项目地址: https://gitcode.com/gh_mirrors/mz/mzt-biz-log
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考