寫在前面
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的小夥伴也不要畏懼,學會一個都是照葫蘆畫瓢的事。不懂查一下就有了,資源辣麼多。如果你需要可以私信我,在我能力範圍內會盡力協助。