溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用SpringCloud Alibaba實現業務日志組件

發布時間:2021-10-09 15:39:00 來源:億速云 閱讀:528 作者:iii 欄目:開發技術

這篇文章主要介紹“如何用SpringCloud Alibaba實現業務日志組件”,在日常操作中,相信很多人在如何用SpringCloud Alibaba實現業務日志組件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何用SpringCloud Alibaba實現業務日志組件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

 如何用SpringCloud Alibaba實現業務日志組件

概述

在單體項目中如果我們需要記錄操作日志一般會通過如下手段實現:

  • 建立一個自定義注解,標注業務操作類型

  • 通過AOP組裝日志實體,完成日志的收集工作

但是在微服務架構中我們不可能每個服務都寫一個自定義注解,再寫一個AOP,這很明顯違反了 Don’t repeat yourself  精神。所以這時候我們一般都會建立一個公共的組件,在公共組件中完成日志的收集,后端服務只需要引入這個公共的組件即可。

SpringBoot Starter

要實現上述的功能我們需要借助SringBoot Starter來實現,SpringBoot  的一大優勢就是Starter,通過Starter我們可以封裝公共的業務邏輯以及參數的初始化,如果你在進行微服務開發,Starter的編寫是一定要掌握的。

這里我們簡單提一下SpringBoot Starter實現自動化配置的流程

  • spring-boot啟動的時候會找到starterjar包中的resources/META-INF/spring.factories文件,根據spring.factories文件中的配置,找到需要自動配置的類,xxxAutoConfigure

  • 通過xxxAutoConfigure上的注解@EnableConfigurationProperties將當前模塊的屬性綁定到「Environment」  上(若有)。

  • 通過xxxAutoConfigure中定義的bean自動裝配到IOC容器中。

實戰

過程如下:

首先我們在項目中建立一個starter的module,如cloud-component-logging-starter

如何用SpringCloud Alibaba實現業務日志組件

編寫配置類SysLogAutoConfigure

@Configuration public class SysLogAutoConfigure {      @Bean     public SysLogAspect controllerLogAspect(){         return new SysLogAspect();     }  }

在SysLogAutoConfigure中我們注入了一個日志切面SysLogAspect,由于日志收集工具不需要額外配置屬性,所以我們也就不需要定義屬性配置類了。

自定義日志注解 SysLog

@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface SysLog {  /**   * 日志內容   * @return {String}   */  String value(); }

定義日志切面 SysLogAspect

@Aspect public class SysLogAspect {      private final Logger log = LoggerFactory.getLogger(this.getClass());      @Pointcut("@annotation(com.javadaily.component.logging.annotation.SysLog)")     public void logPointCut() {      }      @Around("logPointCut()")     public Object around(ProceedingJoinPoint pjp) throws Throwable {         MethodSignature signature = (MethodSignature) pjp.getSignature();         Method method = signature.getMethod();        //類名         String className = pjp.getTarget().getClass().getName();         //方法名         String methodName = signature.getName();              SysLog syslog = method.getAnnotation(SysLog.class);         //操作         String operator =syslog.value();          long beginTime = System.currentTimeMillis();          Object returnValue = null;         Exception ex = null;         try {             returnValue = pjp.proceed();             return returnValue;         } catch (Exception e) {             ex = e;             throw e;         } finally {             long cost = System.currentTimeMillis() - beginTime;             if (ex != null) {                 log.error("[class: {}][method: {}][operator: {}][cost: {}ms][args: {}][發生異常]",                         className, methodName, operator, pjp.getArgs(), ex);             } else {                 log.info("[class: {}][method: {}][operator: {}][cost: {}ms][args: {}][return: {}]",                         className, methodName, operator, cost, pjp.getArgs(), returnValue);             }         }      } }

上面的切面表示,對于使用了@SysLog注解的方法自動進行日志收集,將日志輸入到日志文件。

在resource/META-INF目錄下建立spring.factories文件,加載配置類SysLogAutoConfigure

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.javadaily.component.logging.configure.SysLogAutoConfigure

在微服務中引入日志組件

<dependency>     <groupId>com.jianzh6.cloud</groupId>     <artifactId>cloud-component-logging-starter</artifactId>     <version>1.0.0</version> </dependency>

在需要進行日志收集的方法上添加@SysLog注解

@SysLog("查找用戶") public ResultData<AccountDTO> getByCode(@PathVariable(value = "accountCode") String accountCode){     log.warn("get account detail,accountCode is :{}",accountCode);      SecurityUser securityUser = SecurityUtils.getUser();     log.info(securityUser);      AccountDTO accountDTO = accountService.selectByCode(accountCode);     return ResultData.success(accountDTO); }

到此,關于“如何用SpringCloud Alibaba實現業務日志組件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女