当前位置: 首页 > news >正文

通用日志组件:mzt-biz-log

通用日志组件

开发中遇到日志记录需求?别急着造轮子。

推荐 mzt-biz-log —— 一套开箱即用的通用操作日志组件,轻松记录「谁」在「何时」对「什么」做了「何事」。

项目地址:https://github.com/mouzt/mzt-biz-log

快速上手

这里以 SpringBoot3,JDK17 版本为例

首先,在 pom 文件中引入依赖

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

在 SpringBoot 的启动类上,开启日志记录,tenant 标识租户信息

@EnableLogRecord(tenant = "com.coding")

在需要进行日志记录的接口上,打上相关的注解

@PostMapping("/regist")
@LogRecord(type = "system", subType = "user", bizNo = "",success = "用户名:{{#userReq.username}} 成功注册, 注册完成的用户ID: {{#_ret.data}}",fail = "用户名:{{#userReq.username}} 注册失败,失败原因:{{#_errorMsg}}"
)
public Result<Long> register(@RequestBody UserReq userReq) throws Exception {if ("1".equals(userReq.getUsername())) {return Result.success(2L);}throw new Exception("用户名称已经存在");
}

定义 ILogRecordService 的实现类,处理对应的日志请求

@Component
@Slf4j
public class LogRecordServiceImpl implements ILogRecordService {@Overridepublic void record(LogRecord logRecord) {log.info("接受到操作日志:{}", logRecord);}@Overridepublic List<LogRecord> queryLog(String bizNo, String type) {return Collections.emptyList();}@Overridepublic List<LogRecord> queryLogByBizNo(String bizNo, String type, String subType) {return Collections.emptyList();}
}

访问对应的接口,就能够看到对应的日志输出。使用起来较为方便,只需要在 record 方法之中实现对应的记录日志的操作即可。

这里对其中的一些特殊点进行说明:

  • {{#_errorMsg}} :用来读取方法执行失败后,抛出异常的 errorMessage
  • {{#_ret}}: 用来读取方法的返回结果

@LogRecord

@LogRecord 注解定义了日志记录的核心属性。值得注意的是,所有属性均为 String 类型,其值通过 SpEL 表达式在运行时动态解析

注解里面注释很清楚,这里就不做赘述

这些属性最终会被解析并映射到 LogRecord 实体类中。以下是几个关键属性的深入说明:

属性 备注
operator 操作人,这支持通过 SpEL 从方法参数中读取,不过更多是在 ILogRecordService#record 最终保存日志时,统一设置
condition 是否记录日志,SpEL 表达式返回 true 时执行记录
successCondition 记录成功日志的条件,默认为空,代表不抛异常为成功。如果想通过方法的返回结果来判断,可以通过这个属性来做
http://www.jsqmd.com/news/451699/

相关文章:

  • 教学环境优化与学习效率工具:JiYuTrainer技术指南
  • 符号执行虚假控制流去混淆
  • 高效下载多平台整合:开源工具网盘直链下载助手全面指南
  • 照片元数据管理与整理完全指南:使用ExifToolGui提升工作效率
  • 3步打造无Steam局域网游戏环境:SteamEmulator完全指南
  • CSDN博客内容本地化工具:知识留存与管理完整指南
  • 解锁全速下载体验:Online-disk-direct-link-download-assistant重构网盘资源获取方式
  • Qwen-Image-2512-Pixel-Art-LoRA企业应用案例:中小游戏工作室像素资产管线搭建实录
  • 融合语言与智能:天津外国语大学与文心大模型的务实探索
  • YOLOv11模块拆解:从C2PSA注意力机制到深度可分离卷积的优化奥秘
  • 如何突破网盘限速?3步实现全速下载的秘密武器
  • 解锁3大学习自由:极域环境高效学习环境优化指南
  • CSDN博客下载器使用指南
  • BGE-Large-Zh部署教程:Docker镜像一键拉取+本地Web界面快速访问
  • QT5实战:手把手教你用MQTT实现嵌入式设备远程通信(附完整代码)
  • ollama运行QwQ-32B保姆级教学:模型量化精度与速度平衡策略
  • GLM-OCR在运维自动化中的应用:日志截图与配置文件的智能解析
  • 双目立体视觉在自动驾驶中的应用:如何通过视差图实现精准测距
  • 通义千问1.5-1.8B-Chat-GPTQ-Int4微信小程序开发集成:打造个人智能助理
  • 春联生成模型-中文-base入门指南:如何选择关键词让AI对联更出彩
  • Qwen3-ASR-0.6B真实案例:河南话农业技术广播→农技知识库构建
  • 技术文档神器!用Nano-Banana快速制作产品安装与维护示意图
  • ChatGPT登录页面打不开的排查与优化:从网络诊断到服务端调优
  • 弦音墨影惊艳效果:视频播放时实时叠加墨迹边框+文言批注的沉浸式体验
  • DeepSeek-OCR-2企业集成:API封装+Webhook回调实现与OA系统对接
  • 使用VS Code高效开发Phi-4-mini-reasoning应用的完整指南
  • 提升GitHub协作效率:用快马AI即时生成高质量功能模块代码
  • 造相-Z-Image GPU部署优化:显存管理与计算效率提升
  • 快速验证dhnvr416h-hd设备驱动:用快马平台十分钟搭建原型
  • AI赋能官网:利用快马为openclaw官网添加智能问答助手模块