AOP 實現請求參數和結果記錄

寫在前面

AOP應用-請求日誌記錄
我們在寫 web 項目時,請求內容日誌記錄對我們來說很重要,特別是出問題的要排查時,傳的什麼參數,返回內容都是我們排查的依據,那我們不可能每個controller上的每一個方法都打印log,對原有業務代碼有侵入性,代碼也冗餘和繁瑣。此時AOP就起到了重要作用。可以對業務無任何侵入。而本文實現用的@Around,如單詞意思是圍繞,就是包圍着業務代碼。那我們就可以在業務執行前獲取請求參數打印,執行完成着結果打印,就實現我們的功能了。

代碼

建一個LogTraceHandlerAop文件,隨便找個地方放下就可以。把
@Around 改成你的目標目錄即可
LogTraceHandlerAop.java

@Slf4j
@Aspect
public class LogTraceHandlerAop {
	// controller 下的所有方法
    @Around("execution(* com.example.demo.controller..*.*(..))") 
    public Object doAround(ProceedingJoinPoint call) throws Throwable {
        MethodSignature signature = (MethodSignature) call.getSignature();
        Object[] args = call.getArgs();
        if (args.length <= 0) {
            return call.proceed();
        }
        Method method = signature.getMethod();
        String methodName = method.getName();
        String[] classNameArray = method.getDeclaringClass().getName().split("\\.");
        String className = classNameArray[classNameArray.length - 1];
        StringBuilder buffer = new StringBuilder();
        for (Object arg : args) {
            buffer.append(" ");
            buffer.append(arg);
        }
        log.info("請求方法:{},請求參數:{}", className + "." + methodName, buffer.toString());
        // 主要業務
        Object result = call.proceed();
        // 返回結果
        String resJson = JSON.toJSONString(result);
        log.info("請求返回結果{}", resJson);
        return result;
    }
}

小小的鼓勵

ps: 對初學者說下,其實會寫的都可以寫出來,不懂AOP的小夥伴也不要畏懼,學會一個都是照葫蘆畫瓢的事。不懂查一下就有了,資源辣麼多。如果你需要可以私信我,在我能力範圍內會盡力協助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章