深入解析mzt-biz-log:SpringBoot操作日志组件实战指南

深入解析mzt-biz-log:SpringBoot操作日志组件实战指南

【免费下载链接】mzt-biz-log 支持Springboot,基于注解的可使用变量、可以自定义函数的通用操作日志组件 【免费下载链接】mzt-biz-log 项目地址: https://gitcode.com/gh_mirrors/mz/mzt-biz-log

一、组件概述

mzt-biz-log是一款专为SpringBoot设计的操作日志记录组件,它通过注解方式优雅地解决了业务系统中常见的操作日志记录问题。该组件的核心价值在于能够清晰地记录"谁在什么时间对什么做了什么"这一关键业务信息。

二、核心功能特性

  1. 基础日志记录:自动记录操作人、操作时间和操作内容
  2. SpEL表达式支持:支持在日志模板中使用强大的SpEL表达式
  3. 自定义函数:允许开发者扩展日志内容的生成逻辑
  4. 对象差异对比:自动比较对象修改前后的差异
  5. 条件日志:支持根据条件决定是否记录日志
  6. 分类记录:可按业务类型对日志进行分类
  7. 异常处理:自动区分成功和失败的操作日志

三、快速入门

3.1 环境准备

首先需要在项目中添加组件依赖:

<dependency>
    <groupId>io.github.mouzt</groupId>
    <artifactId>bizlog-sdk</artifactId>
    <version>1.1.1</version>
</dependency>

3.2 启用组件

在SpringBoot启动类上添加注解开启功能:

@SpringBootApplication
@EnableLogRecord(tenant = "com.yourcompany")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3.3 基本使用示例

@LogRecordAnnotation(
    success = "用户{{#user.name}}创建了订单,订单号:{{#orderNo}}",
    prefix = "ORDER",
    bizNo = "{{#orderNo}}"
)
public String createOrder(String orderNo, User user) {
    // 业务逻辑处理
    return "success";
}

四、高级功能详解

4.1 自定义操作人获取

实现IOperatorGetService接口自定义操作人获取逻辑:

@Service
public class CustomOperatorService implements IOperatorGetService {
    @Override
    public OperatorDO getUser() {
        // 从安全上下文中获取当前用户
        User currentUser = SecurityContext.getCurrentUser();
        return new OperatorDO(currentUser.getId(), currentUser.getName());
    }
}

4.2 自定义函数扩展

通过实现IParseFunction接口扩展自定义函数:

@Component
public class ProductParseFunction implements IParseFunction {
    @Override
    public String functionName() {
        return "PRODUCT";
    }

    @Override
    public String apply(Object value) {
        // 根据商品ID查询商品信息
        Product product = productService.getById(value.toString());
        return product != null ? product.getName() + "(" + value + ")" : value.toString();
    }
}

使用示例:

@LogRecordAnnotation(
    success = "修改了商品{PRODUCT{#productId}}的信息",
    prefix = "PRODUCT"
)
public void updateProduct(Long productId) {
    // 业务逻辑
}

4.3 对象差异对比

对于需要记录对象变更的场景,可以使用DIFF功能:

  1. 首先在实体类上添加注解:
@Data
public class User {
    @DiffLogField(name = "用户名")
    private String username;
    
    @DiffLogField(name = "角色", function = "ROLE")
    private String role;
    
    @DiffLogField(name = "状态")
    private Integer status;
}
  1. 在方法上使用DIFF函数:
@LogRecordAnnotation(
    success = "更新了用户信息{_DIFF{#oldUser, #newUser}}",
    prefix = "USER",
    bizNo = "{{#newUser.id}}"
)
public void updateUser(User oldUser, User newUser) {
    // 更新逻辑
}

4.4 条件日志记录

通过condition属性控制日志记录条件:

@LogRecordAnnotation(
    success = "更新了配置项{{#configKey}}",
    prefix = "CONFIG",
    condition = "{{#isImportant}}"
)
public void updateConfig(String configKey, boolean isImportant) {
    // 配置更新逻辑
}

五、最佳实践建议

  1. 日志分类设计:根据业务模块设计合理的日志分类前缀
  2. 敏感信息处理:避免在日志中直接记录敏感信息
  3. 性能考虑:对于高频操作,评估日志记录对性能的影响
  4. 存储策略:根据日志量选择合适的存储方案
  5. 模板设计:保持日志模板简洁明了,便于后续查询分析

六、常见问题解决方案

  1. SpEL表达式不生效:检查表达式语法是否正确,变量是否可访问
  2. 自定义函数未执行:确保函数类已被Spring管理
  3. DIFF功能结果不符合预期:检查对象是否实现了正确的equals方法
  4. 操作人获取失败:验证IOperatorGetService实现是否正确
  5. 事务环境下日志记录问题:确保日志记录操作在独立事务中执行

七、组件原理浅析

mzt-biz-log基于Spring AOP实现,主要工作流程如下:

  1. 通过注解标记需要记录日志的方法
  2. 方法执行前后,AOP拦截器收集上下文信息
  3. 解析SpEL表达式和自定义函数
  4. 构建完整的日志内容
  5. 通过ILogRecordService实现持久化

对于DIFF功能,组件会通过反射获取标记了@DiffLogField的字段,并比较新旧对象的差异,最终生成易于理解的变更描述。

通过合理使用mzt-biz-log组件,开发者可以大幅减少业务系统中操作日志相关的重复代码,提高开发效率的同时保证日志的一致性和可维护性。

【免费下载链接】mzt-biz-log 支持Springboot,基于注解的可使用变量、可以自定义函数的通用操作日志组件 【免费下载链接】mzt-biz-log 项目地址: https://gitcode.com/gh_mirrors/mz/mzt-biz-log

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值