README.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/resources/logback.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
README.md
@@ -33,6 +33,7 @@ | åå¸å¼éæµ | Redisson | [Redissonææ¡£](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | å ¨å±ã请æ±IPãé群ID å¤ç§éæµ | | åå¸å¼é | 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/) | å ¨æ¹ä½æå¡çæ§ | 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> 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: 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> 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> 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; } } 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()); } /** * è·¨åé ç½® */ 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(); } }