亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

基于注解的的AOP日志記錄

Mike617 / 1742人閱讀

摘要:簡(jiǎn)介在前段時(shí)間,看自己寫(xiě)的代碼的時(shí)候,發(fā)現(xiàn)存在大量繁瑣的日志記錄,影響觀感不說(shuō),后期的維護(hù)上也是十分麻煩,決定通過(guò)去解決這個(gè)問(wèn)題,先做記錄。

簡(jiǎn)介

在前段時(shí)間,看自己寫(xiě)的代碼的時(shí)候,發(fā)現(xiàn)存在大量繁瑣的日志記錄,影響觀感不說(shuō),后期的維護(hù)上也是十分麻煩,決定通過(guò)AOP去解決這個(gè)問(wèn)題,先做記錄。

與SpringBoot框架的整合所需要的依賴(lài)包
      
          org.springframework.boot
          spring-boot-starter-aop
      

      
          org.projectlombok
          lombok
      

      
          com.alibaba
          fastjson
      

通過(guò)查閱網(wǎng)上資料,了解到通過(guò)AOP記錄日志,存在兩種方式

基于注解

基于表達(dá)式

詳細(xì)說(shuō)明 一、基于注解的AOP日志
在使用注解這種方式前,我們需要自定義一個(gè)屬于自己的注解@VoiceLog
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface VoiceLog {
}

@@Target說(shuō)明該注解的使用范圍,包含10個(gè)枚舉值;

@Retention說(shuō)明編譯程序如何對(duì)待自定義的Annotation,包含三個(gè)枚舉值:SOURCE,CLASS,RUNTIME;

完成之后,繼續(xù)下面的步驟

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;



@Aspect  // 聲明這是一個(gè)切面類(lèi)
@Component        // 注冊(cè)為一個(gè)bean
@Slf4j        // lombok日志注解
public class AspectLog {


    /**
     * 對(duì)存在注解 `VoiceLog`的方法做日志記錄
     *
     * @param joinPoint joinPoint
     * @param voiceLog  voiceLog
     * @throws Throwable Throwable
     * @see VoiceLog
     */
    @Around(value = "@annotation(voiceLog)")        // aspect增強(qiáng)注解,對(duì)存在該注解方法的前后做攔截
    public Object logAroud(ProceedingJoinPoint joinPoint, VoiceLog voiceLog) throws Throwable {
        // 獲取當(dāng)前毫秒
        long beginTime = System.currentTimeMillis();
        // 執(zhí)行方法體
        Object result = joinPoint.proceed();
        // 計(jì)算方法執(zhí)行時(shí)間
        long time = System.currentTimeMillis() - beginTime;
        //獲取當(dāng)前方法的類(lèi)名
        String className = joinPoint.getTarget().getClass().getSimpleName();
        // 獲取切點(diǎn)處的簽名
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        // 獲取當(dāng)前的方法名
        String methodName = methodSignature.getMethod().getName();
        // 獲取參數(shù)名稱(chēng)
        String[] paramNames = methodSignature.getParameterNames();
        // 獲取參數(shù)值
        Object[] params = joinPoint.getArgs();
        // 把參數(shù)名稱(chēng)和參數(shù)值組裝成json格式
        JSONObject paramsJson = new JSONObject(paramNames.length);
        for (int i = 0; i < paramNames.length; i++) {
            paramsJson.put(paramNames[i], params[i]);
        }
        // 日志輸出
        log.info("TargetClass:{}; method:{}; requestParams:{}; response:{}; time:{}ms", className, methodName, paramsJson.toJSONString(), result, time);
        return Object;
    }
}

配置文件添加配置

spring.aop.proxy-target-class=true

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/75805.html

相關(guān)文章

  • Spring aop+自定義注解統(tǒng)一記錄用戶行為日志

    摘要:自定義注解新增日志注解類(lèi),注解作用于方法級(jí)別,運(yùn)行時(shí)起作用。自定義注解,聲明一種行為,使配置簡(jiǎn)化,代碼層面更加簡(jiǎn)潔。 showImg(https://segmentfault.com/img/remote/1460000017791628); 寫(xiě)在前面 本文不涉及過(guò)多的Spring aop基本概念以及基本用法介紹,以實(shí)際場(chǎng)景使用為主。 場(chǎng)景 我們通常有這樣一個(gè)需求:打印后臺(tái)接口請(qǐng)求的具...

    haobowd 評(píng)論0 收藏0
  • Spring【DAO模塊】就是這么簡(jiǎn)單

    摘要:連接對(duì)象執(zhí)行命令對(duì)象執(zhí)行關(guān)閉值得注意的是,對(duì)數(shù)據(jù)庫(kù)連接池是有很好的支持的。給我們提供了事務(wù)的管理器類(lèi),事務(wù)管理器類(lèi)又分為兩種,因?yàn)榈氖聞?wù)和的事務(wù)是不一樣的。 前言 上一篇Spring博文主要講解了如何使用Spring來(lái)實(shí)現(xiàn)AOP編程,本博文主要講解Spring的DAO模塊對(duì)JDBC的支持,以及Spring對(duì)事務(wù)的控制... 對(duì)于JDBC而言,我們肯定不會(huì)陌生,我們?cè)诔鯇W(xué)的時(shí)候肯定寫(xiě)過(guò)非...

    NSFish 評(píng)論0 收藏0
  • 手把手教你如何優(yōu)雅的使用Aop記錄帶參數(shù)的復(fù)雜Web接口日志

    摘要:幾乎每一個(gè)接口被調(diào)用后,都要記錄一條跟這個(gè)參數(shù)掛鉤的特定的日志到數(shù)據(jù)庫(kù)。我最終采用了的方式,采取攔截的請(qǐng)求的方式,來(lái)記錄日志。所有打上了這個(gè)注解的方法,將會(huì)記錄日志。那么如何從眾多可能的參數(shù)中,為當(dāng)前的日志指定對(duì)應(yīng)的參數(shù)呢。 前言 不久前,因?yàn)樾枨蟮脑?,需要?shí)現(xiàn)一個(gè)操作日志。幾乎每一個(gè)接口被調(diào)用后,都要記錄一條跟這個(gè)參數(shù)掛鉤的特定的日志到數(shù)據(jù)庫(kù)。舉個(gè)例子,就比如禁言操作,日志中需要記...

    Loong_T 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Spring入門(mén)篇》學(xué)習(xí)總結(jié)

    摘要:入門(mén)篇學(xué)習(xí)總結(jié)時(shí)間年月日星期三說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等。 《Spring入門(mén)篇》學(xué)習(xí)總結(jié) 時(shí)間:2017年1月18日星期三說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://git...

    Ververica 評(píng)論0 收藏0
  • Spring之旅第七站:面向切面編程(AOP)

    摘要:面向切面的本章主要內(nèi)容面向切面編程的基本原理通過(guò)創(chuàng)建切面使用注解為切面注入依賴(lài)。什么是面向切面編程切面能夠幫我們模塊化橫切關(guān)注點(diǎn)。在使用面向切面編程時(shí),我們?nèi)匀辉谝粋€(gè)地方定義通知功能,而無(wú)需修改受影響的類(lèi)。切面切面是通知和切點(diǎn)的結(jié)合。 面向切面的Spring 本章主要內(nèi)容: 面向切面編程的基本原理 通過(guò)POJO創(chuàng)建切面 使用@Aspect注解 為AspectJ切面注入依賴(lài)。 說(shuō)明 ...

    趙連江 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<