如何用mzt-biz-log实现Spring Boot操作日志的终极管理?告别繁琐编码的完整指南
mzt-biz-log是一款专为Spring Boot设计的注解驱动式操作日志组件,能帮助开发者轻松记录"谁在什么时间对什么做了什么事",彻底告别手动编写日志代码的繁琐工作。通过简单的注解配置,即可实现灵活高效的操作日志管理,让系统审计和问题排查变得前所未有的简单。
🚀 核心功能一览:为什么选择mzt-biz-log?
注解驱动,零侵入集成
只需在业务方法上添加@LogRecord注解,即可自动记录操作日志,无需修改原有业务逻辑。支持动态变量和SpEL表达式,轻松获取方法参数、返回值等上下文信息。
强大的日志模板引擎
提供灵活的日志模板配置,支持静态文本与动态变量混合,满足各种业务场景的日志格式需求。例如:
@LogRecord(
success = "{{#order.purchaseName}}下了一个订单,购买商品「{{#order.productName}}」,下单结果:{{#_ret}}",
type = LogRecordType.ORDER, bizNo = "{{#order.orderNo}}"
)
智能对象Diff比对
自动识别对象字段变化,精准记录数据修改前后的差异,支持自定义字段名称和转换函数。特别适合更新操作的日志记录,清晰展示每一个字段的变更历史。
自定义函数扩展
支持通过实现IParseFunction接口扩展日志解析能力,将ID转换为可读性更强的文本,例如将用户ID转换为用户名,提升日志的可理解性。
灵活的操作人识别
提供两种操作人获取方式:注解直接指定或通过IOperatorGetService接口自动获取,完美适配各种用户认证场景。
📦 快速上手:三步实现操作日志记录
第一步:引入依赖
在pom.xml中添加SDK依赖:
<dependency>
<groupId>io.github.mouzt</groupId>
<artifactId>bizlog-sdk</artifactId>
<version>3.0.7-SNAPSHOT</version>
</dependency>
第二步:启用日志记录
在Spring Boot启动类上添加@EnableLogRecord注解:
@SpringBootApplication
@EnableTransactionManagement
@EnableLogRecord(tenant = "com.mzt.test")
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
第三步:添加日志注解
在需要记录日志的业务方法上添加@LogRecord注解:
@LogRecord(
success = "{{#order.purchaseName}}下了一个订单,购买商品「{{#order.productName}}」,下单结果:{{#_ret}}",
fail = "创建订单失败,失败原因:「{{#_errorMsg}}」",
type = LogRecordType.ORDER, bizNo = "{{#order.orderNo}}"
)
public boolean createOrder(Order order) {
// 业务逻辑...
return true;
}
💡 高级功能:释放日志管理全部潜力
对象Diff比对:精准记录数据变更
通过@DiffLogField注解标记需要比对的字段,自动生成字段变更日志:
@Data
public class Order {
@DiffLogField(name = "订单ID", function = "ORDER")
private Long orderId;
@DiffLogField(name = "订单号")
private String orderNo;
@DiffLogField(name = "创建人")
private UserDO creator;
}
在注解中使用_DIFF函数触发比对:
@LogRecord(success = "更新了订单{_DIFF{#oldOrder, #newOrder}}",
type = LogRecordType.ORDER, bizNo = "{{#newOrder.orderNo}}")
public boolean updateOrder(Order oldOrder, Order newOrder) {
// 业务逻辑...
return true;
}
比对结果示例:
【创建人的用户ID】从【9001】修改为【9002】;【创建人的用户姓名】从【用户1】修改为【用户2】;【订单ID】从【xxxx(99)】修改为【xxxx(88)】
自定义函数:让日志更具可读性
实现IParseFunction接口创建自定义转换函数,将ID转换为有意义的文本:
@Component
public class OrderParseFunction implements IParseFunction {
@Override
public String functionName() {
return "ORDER";
}
@Override
public String apply(Object value) {
// 将订单ID转换为订单名称
return "订单名称(" + value.toString() + ")";
}
}
在日志模板中使用自定义函数:
@LogRecord(success = "更新了订单{ORDER{#orderId}}",
type = LogRecordType.ORDER, bizNo = "{{#order.orderNo}}")
多场景日志分类
支持通过type和subType字段对日志进行多维度分类,满足不同业务场景的日志查询需求:
@LogRecord(
subType = "MANAGER_VIEW",
success = "{{#order.purchaseName}}下了一个订单",
type = LogRecordType.ORDER, bizNo = "{{#order.orderNo}}"
)
🔧 实用配置指南
全局变量管理
通过LogRecordContext在方法中添加临时变量,供日志模板使用:
LogRecordContext.putVariable("innerOrder", order1);
日志记录条件控制
使用condition属性设置日志记录条件,满足特定条件才记录日志:
@LogRecord(
success = "更新了订单",
type = LogRecordType.ORDER,
bizNo = "{{#order.orderNo}}",
condition = "{{#order.amount > 1000}}"
)
事务一致性配置
配置日志记录与业务事务的一致性,确保日志记录失败不会影响业务逻辑:
@EnableLogRecord(tenant = "com.mzt.test", joinTransaction = true)
📝 版本更新与兼容性
| 版本 | 重要更新 |
|---|---|
| 3.0.7-SNAPSHOT | 修复diff内容相同仍记录日志的问题,优化单测 |
| 3.0.6 | 提供global变量清除方法 |
| 3.0.5 | 修复参数全局传递问题,优化文案比对格式 |
| 3.0.3 | 修复日志打印两次问题,支持方法多注解 |
| 3.0.0 | 注解重命名为@LogRecord,优化字段命名 |
⚠️ 注意:2.0.0版本开始对注解名称和字段进行了优化,与1.x版本不兼容。如果是首次接入,推荐使用最新版本3.x。1.x版本文档:doc/document-1.x.md
🚀 开始使用mzt-biz-log
1. 获取源码
git clone https://gitcode.com/gh_mirrors/mz/mzt-biz-log
2. 查看官方文档
详细使用方法请参考:
3. 核心源码结构
- SDK核心代码:bizlog-sdk/src/main/java/com/mzt/logapi/
- 注解定义:bizlog-sdk/src/main/java/com/mzt/logapi/starter/annotation/
- AOP实现:bizlog-sdk/src/main/java/com/mzt/logapi/starter/support/aop/
💬 技术交流与支持
遇到任何问题或有使用心得,欢迎加入技术交流群讨论:
mzt-biz-log通过注解驱动和灵活配置,彻底解放了操作日志管理的生产力,让开发者能够专注于核心业务逻辑。无论是简单的日志记录还是复杂的对象变更追踪,mzt-biz-log都能提供简单高效的解决方案,是Spring Boot项目日志管理的理想选择。
立即尝试mzt-biz-log,体验前所未有的日志管理便捷性!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




