這篇文章主要介紹“如何用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

編寫配置類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實現業務日志組件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。