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

SpringBoot AOP處理請求日志打印功能代碼實例

 更新時間:2020年03月26日 09:50:20   作者:趙小胖0914  
這篇文章主要介紹了SpringBoot AOP處理請求日志打印功能代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

設(shè)計原則和思路:

  • 元注解方式結(jié)合AOP,靈活記錄操作日志
  • 能夠記錄詳細錯誤日志為運營以及審計提供支持
  • 日志記錄盡可能減少性能影響
  • 操作描述參數(shù)支持動態(tài)獲取,其他參數(shù)自動記錄。

代碼實例如下

@Slf4j
@Aspect
@Configuration
public class RequestAopConfig {

  @Autowired
  private HttpServletRequest request;

  private static final ThreadLocal<Long> START_TIME_MILLIS = new ThreadLocal<>();

  @Pointcut("execution(* com.xxx.xxx.xxx..*(..)) " +
      "&&(@annotation(org.springframework.web.bind.annotation.PostMapping)" +
      "||@annotation(org.springframework.web.bind.annotation.GetMapping)" +
      "||@annotation(org.springframework.web.bind.annotation.PutMapping)" +
      "||@annotation(org.springframework.web.bind.annotation.DeleteMapping))")
  public void controllerMethodPointcut() {
  }

  /**
   * 前置通知:在某連接點之前執(zhí)行的通知,但這個通知不能阻止連接點之前的執(zhí)行流程(除非它拋出一個異常)。
   *
   * @param joinPoint 參數(shù)
   */
  @Before("controllerMethodPointcut()")
  public void before(JoinPoint joinPoint) {
    START_TIME_MILLIS.set(System.currentTimeMillis());
  }

  /**
   * 后置通知:在某連接點正常完成后執(zhí)行的通知,通常在一個匹配的方法返回的時候執(zhí)行。
   *
   * @param joinPoint 參數(shù)
   */
  @AfterReturning(value = "controllerMethodPointcut()", returning = "result")
  public void afterReturning(JoinPoint joinPoint, Object result) {
    String logTemplate = "--------------- 執(zhí)行成功 ---------------\n請求開始---Send Request URL: {}, Method: {}, Params: {} \n請求方法---ClassName: {}, [Method]: {}, execution time: {}ms \n請求結(jié)束---Send Response Result: {}";
    log.info(logTemplate, request.getRequestURL(), request.getMethod(), JSON.toJSONString(joinPoint.getArgs()), joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName(), (System.currentTimeMillis() - START_TIME_MILLIS.get()), JSON.toJSONString(result));
    START_TIME_MILLIS.remove();
  }

  /**
   * 異常通知:在方法拋出異常退出時執(zhí)行的通知。
   *
   * @param joinPoint 參數(shù)
   */
  @AfterThrowing(value = "controllerMethodPointcut()", throwing = "ex")
  public void afterThrowing(JoinPoint joinPoint, Throwable ex) {
    String logTemplate = "--------------- 執(zhí)行失敗 ---------------\n異常請求開始---Send Request URL: {}, Method: {}, Params: {} \n異常請求方法---ClassName: {}, [Method]: {}, execution time: {}ms \n異常請求結(jié)束---Exception Message: {}";
    log.error(logTemplate, request.getRequestURL(), request.getMethod(), JSON.toJSONString(joinPoint.getArgs()), joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName(), (System.currentTimeMillis() - START_TIME_MILLIS.get()), ex.getMessage());
    START_TIME_MILLIS.remove();
  }

  /**
   * 最終通知。當某連接點退出的時候執(zhí)行的通知(不論是正常返回還是異常退出)。
   *
   * @param joinPoint
   */
  @After("controllerMethodPointcut()")
  public void after(JoinPoint joinPoint) {
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • FineReport中自定義登錄界面的方法

    FineReport中自定義登錄界面的方法

    這篇文章主要介紹了 FineReport中自定義登錄界面的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • JAVA錯誤:'無效目標發(fā)行版?17'的解決方案

    JAVA錯誤:'無效目標發(fā)行版?17'的解決方案

    這篇文章主要給大家介紹了關(guān)于JAVA錯誤:'無效目標發(fā)行版?17'的解決方案,文中通過圖文介紹的非常詳細,對大家學習或使用java具有一的的參考學習價值,需要的朋友可以參考下
    2022-09-09
  • 解決Mybatis-plus找不到對應表及默認表名命名規(guī)則的問題

    解決Mybatis-plus找不到對應表及默認表名命名規(guī)則的問題

    這篇文章主要介紹了解決Mybatis-plus找不到對應表及默認表名命名規(guī)則的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Spring全局懶加載的優(yōu)劣及使用方法詳解

    Spring全局懶加載的優(yōu)劣及使用方法詳解

    這篇文章主要介紹了Spring全局懶加載的優(yōu)劣及使用方法詳解,Spring 懶加載是一種延遲加載的機制,它允許在需要時才創(chuàng)建和初始化對象,而不是在應用程序啟動時就立即加載所有對象,通過懶加載,可以提高應用程序的性能和資源利用率,需要的朋友可以參考下
    2023-10-10
  • Java定時任務ScheduledThreadPoolExecutor示例詳解

    Java定時任務ScheduledThreadPoolExecutor示例詳解

    這篇文章主要介紹了Java定時任務ScheduledThreadPoolExecutor示例詳解,這里使用scheduleAtFixedRate方法安排一個任務,該任務是一個 Runnable 匿名類,其run方法中調(diào)用了new LoginViewTimeTask().loginStatisticsHandle()方法,需要的朋友可以參考下
    2023-11-11
  • Java中seata框架的XA模式詳解

    Java中seata框架的XA模式詳解

    這篇文章主要介紹了Java中seata框架的XA模式詳解,Seata?是一款開源的分布式事務解決方案,致力于提供高性能和簡單易用的分布式事務服務,Seata?將為用戶提供了?AT、TCC、SAGA?和?XA?事務模式,為用戶打造一站式的分布式解決方案,需要的朋友可以參考下
    2023-08-08
  • 在Java中避免NullPointerException的解決方案

    在Java中避免NullPointerException的解決方案

    這篇文章主要介紹了在Java中避免NullPointerException的解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 談談Java類型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType

    談談Java類型中ParameterizedType,GenericArrayType,TypeVariabl,Wild

    這篇文章主要介紹Java類型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType的相關(guān)資料,需要的朋友可以參考下
    2015-10-10
  • Springboot讀取配置文件及自定義配置文件的方法

    Springboot讀取配置文件及自定義配置文件的方法

    這篇文章主要介紹了Springboot讀取配置文件及自定義配置文件的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-12-12
  • Java 5億整數(shù)大文件怎么排序

    Java 5億整數(shù)大文件怎么排序

    這篇文章主要介紹了Java 5億整數(shù)大文件怎么排序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03

最新評論

金华市| 醴陵市| 义马市| 丰台区| 梁平县| 澄迈县| 镇原县| 钟祥市| 荔波县| 黑水县| 桂平市| 平和县| 天峻县| 屯昌县| 大厂| 浦北县| 万全县| 贵港市| 航空| 富民县| 灌南县| 禄丰县| 两当县| 扬中市| 安仁县| 九龙城区| 浮梁县| 淮阳县| 南平市| 广汉市| 洛川县| 花莲市| 墨玉县| 曲靖市| 河源市| 拉孜县| 卓尼县| 富顺县| 谷城县| 监利县| 新化县|