日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SpringBoot中通過注解優(yōu)雅記錄操作日志

前言

本文介紹一種SpingBoot系統(tǒng)操作記錄的實(shí)現(xiàn)方法,主要解決誰在什么時間對什么做了什么事。

10余年的青山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整青山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“青山網(wǎng)站設(shè)計”,“青山網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

準(zhǔn)備

1、添加依賴


io.github.mouzt
bizlog-sdk
3.0.0

2、SpringBoot入口打開開關(guān),添加 @EnableLogRecord 注解

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

3、@LogRecord注解說明

  • type:是拼接在 bizNo 上作為 log 的一個標(biāo)識,日志的主分類。
  • subType:日志的二級
  • bizNo:日志的流水號。
  • success:方法調(diào)用成功后把 success 記錄在日志的內(nèi)容中
  • fail:方法調(diào)用失敗后把 fail記錄在日志的內(nèi)容中
  • SpEL 表達(dá)式:其中用雙大括號包圍起來的(例如:{{#browseRecord.username}})#browseRecord.username 是 SpEL表達(dá)式。Spring中支持的它都支持的。比如調(diào)用靜態(tài)方法,三目表達(dá)式。SpEL 可以使用方法中的任何參數(shù)

實(shí)現(xiàn)

1、打印調(diào)用成功日志

@LogRecord(
subType = "開發(fā)文章瀏覽",
extra = "{{#browseRecord.toString()}}",
success = "{{#browseRecord.username}}查看了「{{#browseRecord.articleTitle}}」,結(jié)果:{{#_ret}}",
type = "scan",
bizNo = "{{#browseRecord.articleId}}")
public boolean success(BrowseRecord browseRecord) {
return true;
}

調(diào)用參數(shù):

日志輸出:

【logRecord】log=LogRecord(id=null, tenant=com.zhangls.log, type=scan, subType=開發(fā)文章瀏覽, bizNo=9999, operator=111, actinotallow=九天銀河聊編程查看了「JAVA技術(shù)揭秘」,結(jié)果:true, fail=false, createTime=Mon Mar 06 10:41:25 CST 2023, extra=BrowseRecord(username=九天銀河聊編程, articleId=9999, articleTitle=JAVA技術(shù)揭秘), codeVariable={ClassName=interface
com.zhangls.log.service.LogService, MethodName=success})

2、打印調(diào)用失敗日志

@LogRecord(
fail = "瀏覽失敗,失敗原因:「{{#_errorMsg}}」",
subType = "開發(fā)文章瀏覽",
extra = "{{#browseRecord.toString()}}",
success = "{{#browseRecord.username}}查看了「{{#browseRecord.articleTitle}}」,結(jié)果:{{#_ret}}",
type = "scan",
bizNo = "{{#browseRecord.articleId}}")
public boolean fail(BrowseRecord browseRecord) {
int tmp = 1 / 0;
return false;
}

調(diào)用參數(shù):

日志輸出:

【logRecord】log=LogRecord(id=null, tenant=com.zhangls.log, type=scan, subType=開發(fā)文章瀏覽, bizNo=9999, operator=111, actinotallow=瀏覽失敗,失敗原因:「/ by zero」, fail=true, createTime=Mon Mar 06 10:48:34 CST 2023, extra=BrowseRecord(username=九天銀河聊編程, articleId=9999, articleTitle=JAVA技術(shù)揭秘), codeVariable={ClassName=interface
com.zhangls.log.service.LogService, MethodName=fail})

當(dāng)然也有一個報錯信息:

3、操作差異記錄

開發(fā)記錄函數(shù)

@Component("diff")
public class DiffParseFunction implements IParseFunction {
@Override
public boolean executeBefore() {
return true;
}//設(shè)置在執(zhí)行前記錄
@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#技術(shù)揭秘");
return true;
}

調(diào)用

日志輸出:

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

4、日志記錄保存數(shù)據(jù)

根據(jù)com.mzt.logapi.beans.LogRecord創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu),生成實(shí)體、mapper、XML文件,此過程略。

編寫日志保存服務(wù)類。

@Service
public 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 queryLog(String bizNo, String type) {
return null;
}
@Override
public List queryLogByBizNo(String bizNo, String type, String subType) {
return null;
}
}

代碼實(shí)現(xiàn)

@Override
@LogRecord(
fail = "失敗原因:「{{#_errorMsg}}」",
subType = "開發(fā)文章瀏覽",
operator = "admin",
extra = "{{#browseRecord.toString()}}",
success = "{{#browseRecord.username}}查看了「{{#browseRecord.articleTitle}}」,結(jié)果:{{#_ret}}",
type = "scan",
bizNo = "{{#browseRecord.articleId}}")
public boolean saveDb(BrowseRecord browseRecord) {
return true;
}

控制臺輸出:

數(shù)據(jù)庫記錄:


網(wǎng)頁名稱:SpringBoot中通過注解優(yōu)雅記錄操作日志
網(wǎng)頁地址:http://m.5511xx.com/article/cogocpc.html