IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 开源|操作日志工具 -> 正文阅读

[Java知识库]开源|操作日志工具

摘要:业务系统中难免要记录敏感操作,可以通过硬编码或者简单注解实现,但是都不够优雅,今天分享一个自己写的日志工具。

这是参考美团的一篇文章所实现的日志工具,能够灵活地记录操作日志,并且具有较好的扩展性,欢迎尝鲜。下面是这个工具的介绍和使用教程。

代码仓库:https://github.com/elltor/oplog

预览效果图:

日志效果


oplog

oplog 一个便于使用的操作日志工具。

特性

  • 便于使用。 提供 starter, 通过注解开启功能并自动配置。
  • 灵活。 工具提供了自定义函数、具有表达式解析的日志模版和注解层面的日志持久化控制。
  • 可扩展。 提供了自定义函数、自定义日志操作用户、自定义持久化日志方式。
  • 性能。 通过异步和缓存的方式提升处理性能。

业务逻辑架构

业务逻辑

使用方法

前言

oplog-example 是一个演示模块,你可以通过这个项目快速了解工具的使用和功能。 启动项目后点击链接 http://localhost:8080/swagger-ui/index.html 访问 swagger 文档就可以尝试功能了。

1. 开始使用

开启日志记录功能 :

@EnableLogRecord(tenant = "com.elltor.biz", mode = AdviceMode.PROXY)
@SpringBootApplication
public class Application {
    //.....
}

添加注解 @LogRecord 到你要记录日志的方法上。

被注解注释的方方法的入参和返回值将被作为日志模版的上下文。

@LogRecord(success = "查询了用户, 用户id : {#userid}", category = "user")
    public Object getUserByUserid(String userid) {
        return new Object();
    }

好了,到这里你就可以使用基本的功能了。

2. 自定义日志持久化方式

基础父类 AbstractLogRecordService 并且实现持久化方法 record(Record record)

@Component
@Slf4j
public class PersistenceLogServiceImpl extends AbstractLogRecordService {
    @Override
    public void record(Record record) {
        log.info("example 包中 : {}", record);
    }
}

3. 自定义日志操作用户

实现接口 IOperatorGetService :

@Component
public class LogRecordOperatorGetImpl implements IOperatorGetService {
    @Override
    public Operator getUser() {
        User user = ContextHolder.currentUser();
        Operator op = new Operator();
        op.setUsername(user.getUsername());
        op.setName(user.getName());
        return op;
    }
}

4. 自定义解析函数

注意:

  • 自定义的解析函数必须是静态方法. 如下面的 userDetail 方法。
  • 返回值总是 String 类型的。

实现接口 IParseFunction :

@Component
public class UserDetailFunction implements IParseFunction {
    
    @Component
    private UserDao userDao;
    
    @Override
    public Method functionMethod() {
        Method method = null;
        try{
            method = UserDetailFunction.class.getDeclaredMethod("userDetail", String.class);
        }catch (NoSuchMethodException e){
            e.printStackTrace();
        }
        return method;
    }
    // custom function
    static String userDetail(String userid){
        User u = userDao.getUserByUserid(userid);
        return u.getName()+" "+u.getSex()+" "+u.getAge();
    }
}

5. 使用约定

在注解 LogRecord 中的字段 :

  • success : 成功方法模版,必填字段。
  • condition : 是否记录日志。值为boolean值, 但类型为 String
  • operator : 总是通过实现 IOperatorGetService 接口的类获取或者由你指定。
  • fail : 用来记录方法执行失败的模版文案。

使用技术

  • SpEL(Spring Expression Language)
  • Spring Message Service
  • Java Annotation
  • Spring Boot Auto-configuration

实现参考

https://tech.meituan.com/2021/09/16/operational-logbook.html

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:30:07  更:2021-11-19 17:31:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:48:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码