From cbb0c98f987a69ed3d23d30d65799f1b426e32d2 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期一, 11 十月 2021 17:59:27 +0800 Subject: [PATCH] add [重磅更新] 增加分布式日志框架 TLog --- ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java | 11 ++ ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java | 49 ++++++++++++ ruoyi-admin/src/main/resources/logback.xml | 10 +- pom.xml | 30 +++++++ ruoyi-admin/src/main/resources/application.yml | 4 + ruoyi-common/pom.xml | 15 +++ ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java | 85 +++++++++++++++++++++ README.md | 1 8 files changed, 200 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c910560..fad886f 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ | 鍒嗗竷寮忛檺娴� | Redisson | [Redisson鏂囨。](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | 鍏ㄥ眬銆佽姹侷P銆侀泦缇D 澶氱闄愭祦 | | 鍒嗗竷寮忛攣 | Lock4j | [Lock4j瀹樼綉](https://gitee.com/baomidou/lock4j) | 娉ㄨВ閿併�佸伐鍏烽攣 澶氱澶氭牱 | | 鍒嗗竷寮忓箓绛� | Lock4j | [Lock4j鏂囨。](https://gitee.com/baomidou/lock4j) | 鍩轰簬鍒嗗竷寮忛攣瀹炵幇 | +| 鍒嗗竷寮忔棩蹇� | TLog | [TLog鏂囨。](https://yomahub.com/tlog/docs) | 鏀寔璺熻釜閾捐矾鏃ュ織璁板綍銆佹�ц兘鍒嗘瀽銆侀摼璺帓鏌� | | 鏂囦欢瀛樺偍 | Minio | [Minio鏂囨。](https://docs.min.io/) | 鏈湴瀛樺偍 | | 鏂囦欢瀛樺偍 | 涓冪墰銆侀樋閲屻�佽吘璁� | [OSS浣跨敤鏂囨。](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages?sort_id=4359146&doc_id=1469725) | 浜戝瓨鍌� | | 鐩戞帶妗嗘灦 | SpringBoot-Admin | [SpringBoot-Admin鏂囨。](https://codecentric.github.io/spring-boot-admin/current/) | 鍏ㄦ柟浣嶆湇鍔$洃鎺� | diff --git a/pom.xml b/pom.xml index 6fa31db..c35d131 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,7 @@ <redisson.version>3.16.3</redisson.version> <lock4j.version>2.2.1</lock4j.version> <dynamic-ds.version>3.4.1</dynamic-ds.version> + <tlog.version>1.3.2</tlog.version> <!-- jdk11 缂哄け渚濊禆 jaxb--> <jaxb.version>3.0.1</jaxb.version> @@ -204,6 +205,35 @@ <artifactId>lock4j-redisson-spring-boot-starter</artifactId> <version>${lock4j.version}</version> </dependency> + + <dependency> + <groupId>com.yomahub</groupId> + <artifactId>tlog-spring-boot-configuration</artifactId> + <version>${tlog.version}</version> + </dependency> + + <dependency> + <groupId>com.yomahub</groupId> + <artifactId>tlog-webroot</artifactId> + <version>${tlog.version}</version> + <exclusions> + <exclusion> + <artifactId>javassist</artifactId> + <groupId>org.javassist</groupId> + </exclusion> + <exclusion> + <artifactId>guava</artifactId> + <groupId>com.google.guava</groupId> + </exclusion> + </exclusions> + </dependency> + + <dependency> + <groupId>com.yomahub</groupId> + <artifactId>tlog-feign</artifactId> + <version>${tlog.version}</version> + </dependency> + <!-- 瀹氭椂浠诲姟--> <dependency> <groupId>com.ruoyi</groupId> diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 145469d..dd1c6ba 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -59,6 +59,10 @@ org.springframework: warn config: classpath:logback.xml +# tlog 鍏ㄥ眬璁块棶鎬ц兘鎷︽埅 +tlog: + enable-invoke-time-print: true + # Spring閰嶇疆 spring: application: diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml index c939785..33a1697 100644 --- a/ruoyi-admin/src/main/resources/logback.xml +++ b/ruoyi-admin/src/main/resources/logback.xml @@ -7,7 +7,7 @@ <!-- 鎺у埗鍙拌緭鍑� --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> - <encoder> + <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder"> <pattern>${console.log.pattern}</pattern> <charset>utf-8</charset> </encoder> @@ -22,7 +22,7 @@ <!-- 鏃ュ織鏈�澶� 1澶� --> <maxHistory>1</maxHistory> </rollingPolicy> - <encoder> + <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder"> <pattern>${log.pattern}</pattern> <charset>utf-8</charset> </encoder> @@ -42,7 +42,7 @@ <!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� --> <maxHistory>60</maxHistory> </rollingPolicy> - <encoder> + <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder"> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> @@ -64,7 +64,7 @@ <!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� --> <maxHistory>60</maxHistory> </rollingPolicy> - <encoder> + <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder"> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> @@ -86,7 +86,7 @@ <!-- 鏃ュ織鏈�澶х殑鍘嗗彶 60澶� --> <maxHistory>60</maxHistory> </rollingPolicy> - <encoder> + <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder"> <pattern>${log.pattern}</pattern> </encoder> </appender> diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index f4f7ab9..dd9c182 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -156,6 +156,21 @@ <groupId>com.baomidou</groupId> <artifactId>lock4j-redisson-spring-boot-starter</artifactId> </dependency> + + <dependency> + <groupId>com.yomahub</groupId> + <artifactId>tlog-spring-boot-configuration</artifactId> + </dependency> + + <dependency> + <groupId>com.yomahub</groupId> + <artifactId>tlog-webroot</artifactId> + </dependency> + + <dependency> + <groupId>com.yomahub</groupId> + <artifactId>tlog-feign</artifactId> + </dependency> </dependencies> </project> diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java new file mode 100644 index 0000000..e2120bf --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java @@ -0,0 +1,85 @@ +package com.ruoyi.framework.Interceptor; + +import cn.hutool.core.map.MapUtil; +import com.alibaba.ttl.TransmittableThreadLocal; +import com.ruoyi.common.utils.JsonUtils; +import com.ruoyi.common.utils.StringUtils; +import com.yomahub.tlog.context.TLogContext; +import com.yomahub.tlog.web.interceptor.AbsTLogWebHandlerMethodInterceptor; +import com.yomahub.tlog.web.wrapper.RequestWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.time.StopWatch; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +/** + * 閲嶅啓Tlog web鐨勮皟鐢ㄦ椂闂寸粺璁℃嫤鎴櫒 + * + * @author Lion Li + * @since 3.3.0 + */ +@Slf4j +public class PlusWebInvokeTimeInterceptor extends AbsTLogWebHandlerMethodInterceptor { + + private final TransmittableThreadLocal<StopWatch> invokeTimeTL = new TransmittableThreadLocal<>(); + + @Override + public boolean preHandleByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (TLogContext.enableInvokeTimePrint()) { + String url = request.getMethod() + " " + request.getRequestURI(); + + // 鎵撳嵃璇锋眰鍙傛暟 + if (isJsonRequest(request)) { + String jsonParam = new RequestWrapper(request).getBodyString(); + log.info("[PLUS]寮�濮嬭姹� => URL[{}],鍙傛暟绫诲瀷[json],鍙傛暟:[{}]", url, jsonParam); + } else { + Map<String, String[]> parameterMap = request.getParameterMap(); + if (MapUtil.isNotEmpty(parameterMap)) { + String parameters = JsonUtils.toJsonString(parameterMap); + log.info("[PLUS]寮�濮嬭姹� => URL[{}],鍙傛暟绫诲瀷[param],鍙傛暟:[{}]", url, parameters); + } else { + log.info("[PLUS]寮�濮嬭姹� => URL[{}],鏃犲弬鏁�", url); + } + } + + StopWatch stopWatch = new StopWatch(); + invokeTimeTL.set(stopWatch); + stopWatch.start(); + } + return true; + } + + @Override + public void postHandleByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletionByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + if (TLogContext.enableInvokeTimePrint()) { + StopWatch stopWatch = invokeTimeTL.get(); + stopWatch.stop(); + log.info("[PLUS]缁撴潫璇锋眰 => URL[{}],鑰楁椂:[{}]姣", request.getMethod() + " " + request.getRequestURI(), stopWatch.getTime()); + invokeTimeTL.remove(); + } + } + + /** + * 鍒ゆ柇鏈璇锋眰鐨勬暟鎹被鍨嬫槸鍚︿负json + * + * @param request request + * @return boolean + */ + private boolean isJsonRequest(HttpServletRequest request) { + String contentType = request.getContentType(); + if (contentType != null) { + return StringUtils.startsWithIgnoreCase(contentType, MediaType.APPLICATION_JSON_VALUE); + } + return false; + } + +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java index b1ecf81..f4e2b5f 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java @@ -1,10 +1,13 @@ package com.ruoyi.framework.config; +import com.ruoyi.framework.Interceptor.PlusWebInvokeTimeInterceptor; +import com.yomahub.tlog.web.interceptor.TLogWebInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @@ -20,6 +23,14 @@ public void addResourceHandlers(ResourceHandlerRegistry registry) { } + @Override + public void addInterceptors(InterceptorRegistry registry) { + // 鍏ㄥ眬閾捐矾璺熻釜鎷︽埅鍣� + registry.addInterceptor(new TLogWebInterceptor()); + // 鍏ㄥ眬璁块棶鎬ц兘鎷︽埅 + registry.addInterceptor(new PlusWebInvokeTimeInterceptor()); + } + /** * 璺ㄥ煙閰嶇疆 */ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java new file mode 100644 index 0000000..68bc425 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java @@ -0,0 +1,49 @@ +package com.ruoyi.framework.config; + +import com.yomahub.tlog.core.aop.AspectLogAop; +import com.yomahub.tlog.feign.filter.TLogFeignFilter; +import com.yomahub.tlog.spring.TLogPropertyInit; +import com.yomahub.tlog.spring.TLogSpringAware; +import com.yomahub.tlog.springboot.property.TLogProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.core.annotation.Order; + +/** + * 鏁村悎 TLog 妗嗘灦閰嶇疆 + * + * @author Lion Li + * @since 3.3.0 + */ +@Order(-999) +@Configuration +@Import(TLogProperty.class) +public class TLogConfig { + + @Bean + public TLogPropertyInit tLogPropertyInit(TLogProperty tLogProperty) { + TLogPropertyInit tLogPropertyInit = new TLogPropertyInit(); + tLogPropertyInit.setPattern(tLogProperty.getPattern()); + tLogPropertyInit.setEnableInvokeTimePrint(tLogProperty.enableInvokeTimePrint()); + tLogPropertyInit.setIdGenerator(tLogProperty.getIdGenerator()); + tLogPropertyInit.setMdcEnable(tLogProperty.getMdcEnable()); + return tLogPropertyInit; + } + + @Bean + public TLogSpringAware tLogSpringAware(){ + return new TLogSpringAware(); + } + + @Bean + public AspectLogAop aspectLogAop() { + return new AspectLogAop(); + } + + @Bean + public TLogFeignFilter tLogFeignFilter() { + return new TLogFeignFilter(); + } + +} -- Gitblit v1.9.3