欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringAOP中基于注解實(shí)現(xiàn)通用日志打印方法詳解

 更新時(shí)間:2023年12月31日 08:35:37   作者:_Romeo  
這篇文章主要介紹了SpringAOP中基于注解實(shí)現(xiàn)通用日志打印方法詳解,在日常開發(fā)中,項(xiàng)目里日志是必不可少的,一般有業(yè)務(wù)日志,數(shù)據(jù)庫日志,異常日志等,主要用于幫助程序猿后期排查一些生產(chǎn)中的bug,需要的朋友可以參考下

前言

我們在日常開發(fā)中,項(xiàng)目里日志是必不可少的,一般有業(yè)務(wù)日志,數(shù)據(jù)庫日志,異常日志等,主要用于幫助程序猿后期排查一些生產(chǎn)中的bug。

有時(shí)候程序猿們在做代碼調(diào)優(yōu)的時(shí)候需要關(guān)注每個(gè)接口的響應(yīng)速度,所以需要打印接口調(diào)用時(shí)間,如果在接口中每次寫這段代碼實(shí)在惡心,故基于Spring AOP面向切面編程使用注解解決該問題。

1.定義注解

value為對應(yīng)的接口名稱,默認(rèn)為BaseController

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OwnLog {
    String value() default "BaseController";
}

2.面向切面處理

@Aspect
@Component
@Slf4j
public class LogAspect {
    @Before(value = "@annotation(ownLog)")
    public void before(JoinPoint point, OwnLog ownLog) {
        //point.getArgs()獲取請求參數(shù)
        log.info("服務(wù){(diào)}調(diào)用開始,請求參數(shù):{}", ownLog.value(), JSONObject.toJSONString(point.getArgs()));
    }
    @Around(value = "@annotation(ownLog)")
    public Object around(ProceedingJoinPoint point, OwnLog ownLog) {
        Object result = null;
        String name = ownLog.value();
        long start = System.currentTimeMillis();
        try {
            result = point.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        } finally {
            long end = System.currentTimeMillis();
            log.info(String.format("服務(wù)%s,耗時(shí):%dms", name, (end - start)));
        }
        return result;
    }
    //設(shè)置rvt為返回參數(shù)
    @AfterReturning(value = "@annotation(ownLog)", returning = "rvt")
    public void afterReturning(JoinPoint point, OwnLog ownLog, Object rvt) {
        log.info("服務(wù){(diào)}調(diào)用結(jié)束,response:{}", ownLog.value(), JSONObject.toJSONString(rvt));
    }
}

3.使用注解

@OwnLog("sendMsg")
    @Idempotent
    @ApiOperation(value = "消息推送")
    @PostMapping(value = "/sendMsg")
    public BaseResp sendMessage(@ModelAttribute UserMsgHistoryDTO userMsgHistoryDTO) {
        userMsgHistoryService.sendMessage(findCurrentUser(), userMsgHistoryDTO);
        addUserLog(LOG_TYPE_USER, "用戶消息推送", JSON.toJSONString(userMsgHistoryDTO));
        return new BaseResp<>(ResultStatus.SUCCESS);
    }

4.控制臺打印

輸出:

服務(wù)addEnrolmentUser調(diào)用開始,request:[{"age":0,"country":"string","health":"一般","idNum":"12345","name":"string","phoneNum":"string","status":"審核中"}]
服務(wù)addEnrolmentUser,耗時(shí):13ms
服務(wù)addEnrolmentUser調(diào)用結(jié)束,response:{"code":10000,"message":"操作成功","success":true}

到此這篇關(guān)于SpringAOP中基于注解實(shí)現(xiàn)通用日志打印方法詳解的文章就介紹到這了,更多相關(guān)SpringAOP注解實(shí)現(xiàn)日志打印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Spring源碼報(bào)錯(cuò)java:找不到類 InstrumentationSavingAgent的問題

    使用Spring源碼報(bào)錯(cuò)java:找不到類 InstrumentationSavingAgent的問題

    這篇文章主要介紹了使用Spring源碼報(bào)錯(cuò)java:找不到類 InstrumentationSavingAgent的問題,本文給大家分享解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 淺談mac下maven的安裝配置與使用

    淺談mac下maven的安裝配置與使用

    這篇文章主要介紹了淺談mac下maven的安裝配置與使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Springboot如何集成websocket

    Springboot如何集成websocket

    這篇文章主要介紹了Springboot如何集成websocket問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringBoot Aop 詳解和多種使用場景解析

    SpringBoot Aop 詳解和多種使用場景解析

    aop面向切面編程,是編程中一個(gè)很重要的思想本篇文章主要介紹的是SpringBoot切面Aop的使用和案例,對SpringBoot Aop相關(guān)知識感興趣的朋友跟隨小編一起看看吧
    2021-08-08
  • Spring注解之Service用法及示例詳解

    Spring注解之Service用法及示例詳解

    使用 @Service 注解可以將一個(gè)類聲明為業(yè)務(wù)邏輯組件,并將其對象存入 Spring 容器中,在控制器類中,通過注入該組件的實(shí)例,即可調(diào)用其中的方法,這篇文章主要介紹了Spring注解之Service用法及示例詳解,需要的朋友可以參考下
    2024-04-04
  • 在Spring中配置Quartz的三種方式

    在Spring中配置Quartz的三種方式

    Spring Quartz 是一個(gè)任務(wù)調(diào)度框架,它允許我們定期執(zhí)行特定的任務(wù),在 Spring 中,我們可以通過多種方式來配置 Quartz,包括使用 ??@Scheduled?? 注解、XML 配置和 Java 配置,本文將介紹如何在 Spring 中使用這三種方式來配置 Quartz,需要的朋友可以參考下
    2025-01-01
  • 解決idea 通過build project 手動觸發(fā)熱部署失敗的問題

    解決idea 通過build project 手動觸發(fā)熱部署失敗的問題

    在debug運(yùn)行項(xiàng)目的過程中,并且保證(不添加方法,不修改方法名)一定的規(guī)則的情況下,可以通過build project 來手動熱部署項(xiàng)目,本文給大家介紹解決idea 通過build project 手動觸發(fā)熱部署失敗的問題,感興趣的朋友一起看看吧
    2023-12-12
  • spring boot注解方式使用redis緩存操作示例

    spring boot注解方式使用redis緩存操作示例

    這篇文章主要介紹了spring boot注解方式使用redis緩存操作,結(jié)合實(shí)例形式分析了spring boot注解方式使用redis緩存相關(guān)的依賴庫引入、注解使用及redis緩存相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Java+Mysql學(xué)生管理系統(tǒng)源碼

    Java+Mysql學(xué)生管理系統(tǒng)源碼

    這篇文章主要為大家詳細(xì)介紹了Java+Mysql學(xué)生管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java內(nèi)存溢出和內(nèi)存泄露

    Java內(nèi)存溢出和內(nèi)存泄露

    這篇文章主要介紹了Java內(nèi)存溢出和內(nèi)存泄露的相關(guān)資料,需要的朋友可以參考下
    2017-10-10

最新評論