最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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,需要的朋友可以參考下

前言

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

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

1.定義注解

value為對(duì)應(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()獲取請(qǐng)求參數(shù)
        log.info("服務(wù){(diào)}調(diào)用開始,請(qǐng)求參數(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.控制臺(tái)打印

輸出:

服務(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot如何使用feign實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用和錯(cuò)誤熔斷

    SpringBoot如何使用feign實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用和錯(cuò)誤熔斷

    這篇文章主要介紹了SpringBoot如何使用feign實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用和錯(cuò)誤熔斷,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 使用springboot每日推送早安問候語到用戶微信的全過程

    使用springboot每日推送早安問候語到用戶微信的全過程

    近期網(wǎng)上又出現(xiàn)一股給女朋友做微信公眾號(hào)推送的潮流,所以這篇文章主要給大家介紹了關(guān)于如何使用springboot每日推送早安問候語到用戶微信的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Fluent Mybatis零xml配置實(shí)現(xiàn)復(fù)雜嵌套查詢

    Fluent Mybatis零xml配置實(shí)現(xiàn)復(fù)雜嵌套查詢

    本文主要介紹了Fluent Mybatis零xml配置實(shí)現(xiàn)復(fù)雜嵌套查詢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java中Runnable和Thread的區(qū)別分析

    Java中Runnable和Thread的區(qū)別分析

    在java中可有兩種方式實(shí)現(xiàn)多線程,一種是繼承Thread類,一種是實(shí)現(xiàn)Runnable接口,下面就拉分別介紹一下這兩種方法的優(yōu)缺點(diǎn)
    2013-03-03
  • Java包裝類的緩存機(jī)制原理實(shí)例詳解

    Java包裝類的緩存機(jī)制原理實(shí)例詳解

    這篇文章主要介紹了Java包裝類的緩存機(jī)制原理實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • springboot配置Undertow服務(wù)器全過程

    springboot配置Undertow服務(wù)器全過程

    Spring?Boot默認(rèn)使用內(nèi)嵌Tomcat容器簡(jiǎn)化部署,但部分開發(fā)者選擇性能更優(yōu)的Undertow替代,集成Undertow需排除Tomcat依賴,直接引入相關(guān)模塊即可實(shí)現(xiàn)高并發(fā)、低內(nèi)存的Web服務(wù)運(yùn)行
    2025-07-07
  • Mybatis Plus條件構(gòu)造器ConditionConstructor用法實(shí)例解析

    Mybatis Plus條件構(gòu)造器ConditionConstructor用法實(shí)例解析

    這篇文章主要介紹了Mybatis Plus條件構(gòu)造器ConditionConstructor用法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳解Java對(duì)象結(jié)構(gòu)與對(duì)象鎖的升級(jí)

    詳解Java對(duì)象結(jié)構(gòu)與對(duì)象鎖的升級(jí)

    這篇文章主要為大家詳細(xì)介紹了Java對(duì)象結(jié)構(gòu)與對(duì)象鎖的升級(jí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Redis結(jié)合AOP與自定義注解實(shí)現(xiàn)分布式緩存流程詳解

    Redis結(jié)合AOP與自定義注解實(shí)現(xiàn)分布式緩存流程詳解

    項(xiàng)目中如果查詢數(shù)據(jù)是直接到MySQL數(shù)據(jù)庫中查詢的話,會(huì)查磁盤走IO,效率會(huì)比較低,所以現(xiàn)在一般項(xiàng)目中都會(huì)使用緩存,目的就是提高查詢數(shù)據(jù)的速度,將數(shù)據(jù)存入緩存中,也就是內(nèi)存中,這樣查詢效率大大提高
    2022-11-11
  • 利用反射獲取Java類中的靜態(tài)變量名及變量值的簡(jiǎn)單實(shí)例

    利用反射獲取Java類中的靜態(tài)變量名及變量值的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)硪黄梅瓷浍@取Java類中的靜態(tài)變量名及變量值的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12

最新評(píng)論

罗平县| 柞水县| 洞头县| 安庆市| 平安县| 凌海市| 巴中市| 盖州市| 金湖县| 沅陵县| 沽源县| 图片| 扬中市| 中山市| 乌鲁木齐县| 溆浦县| 奉节县| 邹平县| 西林县| 丰原市| 乌拉特前旗| 祥云县| 榆树市| 芷江| 阿拉善左旗| 东乌珠穆沁旗| 当涂县| 固安县| 比如县| 金阳县| 安图县| 连平县| 日照市| 全州县| 上蔡县| 安多县| 齐齐哈尔市| 绥芬河市| 喀什市| 龙门县| 嘉祥县|