mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	【功能优化】全局:ApiAccessLogInterceptor 额外打印 Controller 地址,基于 https://t.zsxq.com/Z70Sl 建议
This commit is contained in:
		| @@ -1,6 +1,8 @@ | ||||
| package cn.iocoder.yudao.framework.apilog.core.interceptor; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.io.FileUtil; | ||||
| import cn.hutool.core.io.resource.ResourceUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | ||||
| import cn.iocoder.yudao.framework.common.util.spring.SpringUtils; | ||||
| @@ -11,7 +13,11 @@ import org.springframework.util.StopWatch; | ||||
| import org.springframework.web.method.HandlerMethod; | ||||
| import org.springframework.web.servlet.HandlerInterceptor; | ||||
|  | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Optional; | ||||
| import java.util.stream.IntStream; | ||||
|  | ||||
| /** | ||||
|  * API 访问日志 Interceptor | ||||
| @@ -49,6 +55,8 @@ public class ApiAccessLogInterceptor implements HandlerInterceptor { | ||||
|             StopWatch stopWatch = new StopWatch(); | ||||
|             stopWatch.start(); | ||||
|             request.setAttribute(ATTRIBUTE_STOP_WATCH, stopWatch); | ||||
|             // 打印 Controller 路径 | ||||
|             printHandlerMethodPosition(handlerMethod); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| @@ -64,4 +72,32 @@ public class ApiAccessLogInterceptor implements HandlerInterceptor { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 打印 Controller 方法路径 | ||||
|      */ | ||||
|     private void printHandlerMethodPosition(HandlerMethod handlerMethod) { | ||||
|         if (handlerMethod == null) { | ||||
|             return; | ||||
|         } | ||||
|         Method method = handlerMethod.getMethod(); | ||||
|         Class<?> clazz = method.getDeclaringClass(); | ||||
|         try { | ||||
|             // 获取 method 的 lineNumber | ||||
|             List<String> clazzContents = FileUtil.readUtf8Lines( | ||||
|                     ResourceUtil.getResource(null, clazz).getPath().replace("/target/classes/", "/src/main/java/") | ||||
|                             + clazz.getSimpleName() + ".java"); | ||||
|             Optional<Integer> lineNumber = IntStream.range(0, clazzContents.size()) | ||||
|                     .filter(i -> clazzContents.get(i).contains(" " + method.getName() + "(")) // 简单匹配,不考虑方法重名 | ||||
|                     .mapToObj(i -> i + 1) // 行号从 1 开始 | ||||
|                     .findFirst(); | ||||
|             if (lineNumber.isEmpty()) { | ||||
|                 return; | ||||
|             } | ||||
|             // 打印结果 | ||||
|             System.out.printf("\tController 方法路径:%s(%s.java:%d)\n", clazz.getName(), clazz.getSimpleName(), lineNumber.get()); | ||||
|         } catch (Exception ignore) { | ||||
|             // 忽略异常。原因:仅仅打印,非重要逻辑 | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV