媒介

本文介绍一种SpingBoot系统操做记录的实现办法,次要处理谁在什么时间对什么做了什么事。

筹办添加依赖<dePEndency> <groupId>io.github.mouzt</groupId> <artifactId>bizlog-sdk</artifactId> <version>3.0.0</version></dependency>

2.SPRingBoot入口翻开开关,添加 @EnableLogRecord 注解

@EnableLogRecord(tenant = "com.zhangls.log")@SpringBootApplicationpublic class LogApplication { public static void main(String[] args) { SpringApplication.run(LogApplication.class, args); }}

3.@LogRecord注讲解明

type:是拼接在 bizNo 上做为 log 的一个标识,日记的主分类。subType:日记的二级bizNo:日记的流水号。success:办法挪用胜利后把 success 记录在日记的内容中fail:办法挪用失败后把 fail记录在日记的内容中SpEL 表达式:此中用双大括号包抄起来的(例如:{{#browseRecord.username}})#browseRecord.username 是 SpEL表达式。Spring中撑持的它都撑持的。好比挪用静态办法,三目表达式。SpEL 能够利用办法中的任何参数实现打印挪用胜利日记@LogRecord( subType = "开发文章阅读", extra = "{{#browseRecord.toString()}}", success = "{{#browseRecord.username}}查看了「{{#browseRecord.articleTitle}}」,成果:{{#_ret}}", type = "scan", bizNo = "{{#browseRecord.articleId}}")public boolean success(BrowseRecord browseRecord) { return true;}

挪用参数:

SpringBoot中通过注解优雅记录操作日志  第1张

日记输出:

【logRecord】log=LogRecord(id=null, tenant=com.zhangls.log, type=scan, subType=开发文章阅读, bizNo=9999, operator=111, action=九天银河聊编程查看了「JAVA手艺揭秘」,成果:true, fail=false, createTime=Mon Mar 06 10:41:25 CST 2023, extra=BrowseRecord(username=九天银河聊编程, articleId=9999, articleTitle=JAVA手艺揭秘), codeVariable={ClassName=interface com.zhangls.log.service.LogService, MethodName=success})

2.打印挪用失败日记

@LogRecord( fail = "阅读失败,失败原因:「{{#_errorMsg}}」", subType = "开发文章阅读", extra = "{{#browseRecord.toString()}}", success = "{{#browseRecord.username}}查看了「{{#browseRecord.articleTitle}}」,成果:{{#_ret}}", type = "scan", bizNo = "{{#browseRecord.articleId}}")public boolean fail(BrowseRecord browseRecord) { int tmp = 1 / 0; return false;}

挪用参数:

SpringBoot中通过注解优雅记录操作日志  第2张

日记输出:

【logRecord】log=LogRecord(id=null, tenant=com.zhangls.log, type=scan, subType=开发文章阅读, bizNo=9999, operator=111, action=阅读失败,失败原因:「/ by zero」, fail=true, createTime=Mon Mar 06 10:48:34 CST 2023, extra=BrowseRecord(username=九天银河聊编程, articleId=9999, articleTitle=JAVA手艺揭秘), codeVariable={ClassName=interface com.zhangls.log.service.LogService, MethodName=fail})

当然也有一个报错信息:

SpringBoot中通过注解优雅记录操作日志  第3张

操做差别记录

开发记录函数

@Component("diff")public class DiffParseFunction implements IParseFunction { @Override public boolean executeBefore() { return true; }//设置在施行前记录 @Override public String functionName() { return "DIFF"; } @Override public String apply(Object value) { if (StringUtils.isEmpty(value)) { return ""; } return "".concat("(").concat(value.toString()).concat(")"); }}

日记部门代码

@Override@LogRecord(success = "更新前{DIFF{#browseRecord}},更新后{{#browseRecord}}", type = "scan", bizNo = "{{#browseRecord.articleId}}")public boolean diff(BrowseRecord browseRecord) { browseRecord.setArticleTitle("C#手艺揭秘"); return true;}

挪用

SpringBoot中通过注解优雅记录操作日志  第4张

日记输出:

【logRecord】log=LogRecord(id=null, tenant=com.zhangls.log, type=scan, subType=, bizNo=9999, operator=111, action=更新前(BrowseRecord(username=九天银河聊编程, articleId=9999, articleTitle=JAVA手艺揭秘)),更新后BrowseRecord(username=九天银河聊编程, articleId=9999, articleTitle=C#手艺揭秘), fail=false, createTime=Mon Mar 06 10:55:14 CST 2023, extra=, codeVariable={ClassName=interface com.zhangls.log.service.LogService, MethodName=diff})

日记记录保留数据

按照com.mzt.logapi.beans.LogRecord创建数据库表构造,生成实体、mapper、XML文件,此过程略。

SpringBoot中通过注解优雅记录操作日志  第5张

编写日记保留办事类。

@Servicepublic class LogRecordServiceImpl implements ILogRecordService { @Resource private TLogrecordMapper logRecordMapper; @Override public void record(LogRecord logRecord) { TLogrecord record = new TLogrecord(); BeanUtils.copyProperties(logRecord, record); logRecordMapper.insert(record); } @Override public List<LogRecord> queryLog(String bizNo, String type) { return null; } @Override public List<LogRecord> queryLogByBizNo(String bizNo, String type, String subType) { return null; }}

代码实现

@Override@LogRecord( fail = "失败原因:「{{#_errorMsg}}」", subType = "开发文章阅读", operator = "admin", extra = "{{#browseRecord.toString()}}", success = "{{#browseRecord.username}}查看了「{{#browseRecord.articleTitle}}」,成果:{{#_ret}}", type = "scan", bizNo = "{{#browseRecord.articleId}}")public boolean saveDb(BrowseRecord browseRecord) { return true;}

控造台输出:

SpringBoot中通过注解优雅记录操作日志  第6张

数据库记录:

SpringBoot中通过注解优雅记录操作日志  第7张

每天一个小常识,每天前进一点点!!![加油][加油][加油]