爽!一个注解,搞定 SpringBoot 操作日志

2023-11-16

来源:blog.csdn.net/weixin_43954303/article/details/113781801
使用方式
基本使用
源码
此组件解决的问题是:「谁」在「什么时间」对「什么」做了「什么事」
本组件目前针对 Spring-boot 做了 Autoconfig,如果是 SpringMVC,也可自己在 xml 初始化 bean
使用方式

基本使用

maven依赖添加SDK依赖
        <dependency>
            <groupId>io.github.mouzt</groupId>
            <artifactId>bizlog-sdk</artifactId>
            <version>1.0.1</version>
        </dependency>

SpringBoot入口打开开关,添加 @EnableLogRecord 注解
tenant是代表租户的标识,一般一个服务或者一个业务下的多个服务都写死一个 tenant 就可以

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableTransactionManagement
@EnableLogRecord(tenant = "com.mzt.test")
public class Main {
   

    public static void main(String[] args) {
   
        SpringApplication.run(Main.class, args);
    }
}

日志埋点

  1. 普通的记录日志
    pefix:是拼接在 bizNo 上作为 log 的一个标识。避免 bizNo 都为整数 ID 的时候和其他的业务中的 ID 重复。比如订单 ID、用户 ID 等
    bizNo:就是业务的 ID,比如订单ID,我们查询的时候可以根据 bizNo 查询和它相关的操作日志
    success:方法调用成功后把 success 记录在日志的内容中
    SpEL 表达式:其中用双大括号包围起来的(例如:{ {#order.purchaseName}})#order.purchaseName 是 SpEL表达式。Spring中支持的它都支持的。比如调用静态方法,三目表达式。SpEL 可以使用方法中的任何参数
  @LogRecordAnnotation(success = "{
   {#order.purchaseName}}下了一个订单,购买商品「{
   {#order.productName}}」,下单结果:{
   {#_ret}}",
              prefix = LogRecordType.ORDER, bizNo = "{
   {#order.orderNo}}")
  public boolean createOrder(Order order) {
   
      log.info("【创建订单】orderNo={}", order.getOrderNo());
      // db insert order
      return true;
  }

此时会打印操作日志 “张三下了一个订单,购买商品「超值优惠红烧肉套餐」,下单结果:true”
2. 期望记录失败的日志, 如果抛出异常则记录fail的日志,没有抛出记录 success 的日志

 @LogRecordAnnotation(
            fail = "创建订单失败,失败原因:「{
   {#_errorMsg}}」",
            success = "{
   {#order.purchaseName}}下了一个订单,购买商品「{
   {#order.productName}}」,下单结果:{
   {#_ret}}",
            prefix = LogRecordType.ORDER, bizNo = "{
   {#order.orderNo}}")
    public boolean createOrder(Order order) {
   
        log.info("【创建订单】orderNo={}", order.getOrderNo());
        // db insert order
        return true;
    }

其中的 #_errorMsg 是取的方法抛出异常后的异常的 errorMessage。
3. 日志支持种类
比如一个订单的操作日志,有些操作日志是用户自己操作的,有些操作是系统运营人员做了修改产生的操作日志,我们系统不希望把运营的操作日志暴露给用户看到, 但是运营期望可以看到用户的日志以及运营自己操作的日志,这些操作日志的bizNo都是订单号,所以为了扩展添加了类型字段,主要是为了对日志做分类,查询方便,支持更多的业务。

@LogRecordAnnotation(
fail = “创建订单失败,失败原因:「{ {#_errorMsg}}」”,
category = “MANAGER”,
success = “{ {#order.pu

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爽!一个注解,搞定 SpringBoot 操作日志 的相关文章

随机推荐

  • ResourceMgr 读取文件夹内容

    using System Collections using System Collections Generic using System IO using System using System Net using UnityEngin
  • 深度强化学习系列(6): DQN原理及实现

    利用神经网络近似值函数的方法表示为 V s w
  • Python @装饰器

    目录 目录 一 介绍 1 简单实现装饰器 普通调用 糖语法 2 进阶 普通调用 糖语法 3 装饰类 二 内置修饰器 一 介绍 装饰器 Decorators 是 Python 的一个重要部分 简单地说 他们是修改其他函数的功能的函数 与jav
  • 公司产品STM32 B错误排查分析

    近期原本好好的产品 突然上电不久MCU就卡住 调试发现跳到default handler错误 也就是B错误 根据网上获取的信息 有2个原因 1 没有相关中断 2 没清除标志 我看了下 串口2的中断函数USART2 IRQHandler已经有
  • 【MyBatis】进一步理解choose、when、otherwise标签

    choose when otherwise choose里面包含when otherwise两个标签 choose是父标签 when和otherwise必须都要写在它里面 当 when 中有条件满足的时候 就会跳出 choose 即所有的
  • 怎么修改csdn文本的字体样式

    示例 font face 仿宋 color FF0000 size 1 待修改语句 当前这句是字体大小为1的红色仿宋字体 font 以上的三个属性可选 其中 face 字体类型 如楷体 微软雅黑 仿宋等 color 字体颜色 十六进制的 s
  • IntelliJ IDEA的这个接口调试工具真是太好用了!

    你有一个思想 我有一个思想 我们交换后 一个人就有两个思想 If you can NOT explain it simply you do NOT understand it well enough 现陆续将Demo代码和技术文章整理在一起
  • mac虚拟摄像头插件_用于在macOS上从OBS的输出创建虚拟网络摄像头设备

    OBS macOS Virtual Camera Creates a virtual webcam device from the output of OBS Studio Especially useful for streaming s
  • HTML语言笔记(一)

    参考教程 HTML教程 1 简介 HTML是超文本标记语言 Hyper Text Markup Language 使用标记标签来描述网页 HTML 标签是由尖括号包围的关键词 比如 通常是成对出现的 Web的作用就是读取HTML文档 并以网
  • Pytorch/TensorFlow/Numpy常用函数汇总

    常用函数 一 Pytorch 1 枚举 enumerate 2 维度交换 permute 3 尺寸形状 size shape 4 数据填充 full fill 5 阻断反向梯度传播 detach 6 形状调整 view 7 维度扩张 减少
  • Windows 10 mvn不是内部或外部命令,也不是可运行的程序

    win10新装idea 使用mvn时提示mvn不是内部或外部命令 也不是可运行的程序 根据网上找到的方法如下设置 发现并没有什么用 可能是系统或则用户权限问题 直接删除了用户变量后在Path属性后面添加一条maven的地址 重启CMD后发现
  • 保留指定位数小数点的方法(五种)

    package feifan import java text DecimalFormat import java text NumberFormat public class YuoXiaoShuzi public static void
  • 从mpeg ts文件中提取I帧(5):I帧的解码

    找到含有I帧的pes后就可以对其进行解码 对I帧的解码我们使用ffmpeg 这里用到的版本是3 0 0 一 pes解码为yuv ffmpeg一般都是这个套路 直接上代码 int ffdecode pes uint8 t pes data i
  • 硬件十万个为什么

    1 电源类 1 1 电源基础 各种 地 各种 GND 板载电源设计规范 电源环路稳定性评价方法 深入芯片内部 理解去耦电容的作用 减小DC DC变换器中的接 地反弹 一些接地要点 开关电源中的小启示 电源相关的测试 去耦电容的选择 容值计算
  • 马上:纸币互动,智能笔数据点压缩

    马上 纸币互动 智能笔数据点压缩 对接一款智能笔 笔的数据是通过蓝牙传给app 但是笔的笔迹点数量很多 网络传输用json就不恰当 所以一番调研才起二进制压缩点 数字压缩基本原理 基本数据 class Dot implements Seri
  • Python-爬虫实现天气查询-有GUI界面

    Python用缩进来区分代码层次 代码的主体是爬虫与Tkinter 执行程序后会先出现一个选择城市的界面 这里需要输入城市名 点击确认即会出现城市天气状况 执行效果如下 完整代码如下 from tkinter import GUI设计 tk
  • .NET和Web 3.0

    Professional Visual Studio Extensibility 的作者Keyvan Nayyeri 在他的博客里头发表了 NET and Web 3 0 作为 NET社区的一个名人 他同时是 Professional Co
  • JLabel显示图片,及其它使用方法。。。实现九九乘法表

    JLabel的使用 显示九九乘法表 并使用JLabel载入背景图片 窗口大小固定public MyFrame extends JFrame public MyFrame String str JLabel jL setLayout null
  • 在Element-ui的table表格中,如何让分页的序号延续上一页的序号

    可以通过传递index属性来自定义索引 1 页面
  • 爽!一个注解,搞定 SpringBoot 操作日志

    来源 blog csdn net weixin 43954303 article details 113781801 使用方式 基本使用 源码 此组件解决的问题是 谁 在 什么时间 对 什么 做了 什么事 本组件目前针对 Spring bo