SpringAOP中基于注解實現(xiàn)通用日志打印方法詳解
前言
我們在日常開發(fā)中,項目里日志是必不可少的,一般有業(yè)務日志,數(shù)據(jù)庫日志,異常日志等,主要用于幫助程序猿后期排查一些生產(chǎn)中的bug。
有時候程序猿們在做代碼調(diào)優(yōu)的時候需要關注每個接口的響應速度,所以需要打印接口調(diào)用時間,如果在接口中每次寫這段代碼實在惡心,故基于Spring AOP面向切面編程使用注解解決該問題。
1.定義注解
value為對應的接口名稱,默認為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("服務{(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("服務%s,耗時:%dms", name, (end - start)));
}
return result;
}
//設置rvt為返回參數(shù)
@AfterReturning(value = "@annotation(ownLog)", returning = "rvt")
public void afterReturning(JoinPoint point, OwnLog ownLog, Object rvt) {
log.info("服務{(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.控制臺打印
輸出:
服務addEnrolmentUser調(diào)用開始,request:[{"age":0,"country":"string","health":"一般","idNum":"12345","name":"string","phoneNum":"string","status":"審核中"}]
服務addEnrolmentUser,耗時:13ms
服務addEnrolmentUser調(diào)用結(jié)束,response:{"code":10000,"message":"操作成功","success":true}
到此這篇關于SpringAOP中基于注解實現(xiàn)通用日志打印方法詳解的文章就介紹到這了,更多相關SpringAOP注解實現(xiàn)日志打印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot如何使用feign實現(xiàn)遠程接口調(diào)用和錯誤熔斷
這篇文章主要介紹了SpringBoot如何使用feign實現(xiàn)遠程接口調(diào)用和錯誤熔斷,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12
使用springboot每日推送早安問候語到用戶微信的全過程
近期網(wǎng)上又出現(xiàn)一股給女朋友做微信公眾號推送的潮流,所以這篇文章主要給大家介紹了關于如何使用springboot每日推送早安問候語到用戶微信的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11
Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢
本文主要介紹了Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
Mybatis Plus條件構(gòu)造器ConditionConstructor用法實例解析
這篇文章主要介紹了Mybatis Plus條件構(gòu)造器ConditionConstructor用法實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
Redis結(jié)合AOP與自定義注解實現(xiàn)分布式緩存流程詳解
項目中如果查詢數(shù)據(jù)是直接到MySQL數(shù)據(jù)庫中查詢的話,會查磁盤走IO,效率會比較低,所以現(xiàn)在一般項目中都會使用緩存,目的就是提高查詢數(shù)據(jù)的速度,將數(shù)據(jù)存入緩存中,也就是內(nèi)存中,這樣查詢效率大大提高2022-11-11
利用反射獲取Java類中的靜態(tài)變量名及變量值的簡單實例
下面小編就為大家?guī)硪黄梅瓷浍@取Java類中的靜態(tài)變量名及變量值的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12

