之前用Jfinal框架,他有个和方便得小东西就是每次请求都会在控制台打印出来,
点击还能跳转到方法类,
后面用Springboot的时候想着自己写一个小东西,方便调试,
代码如下:
package com.as.common.interceptor; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import com.fasterxml.jackson.databind.ObjectMapper; /** * * @Description 打印请求信息 * @author 张银彪 * @category * @date 2019年12月12日 下午5:50:26 * @version V0.1 */ @Aspect @Component public class InfoPrint { private final static Logger logger = LoggerFactory.getLogger(InfoPrint.class); private final ObjectMapper mapper; @Value("${xc.isDev}") boolean isDev=false; @Autowired public InfoPrint(ObjectMapper mapper) { this.mapper = mapper; } //使用此注解才可以进入打印 @Pointcut("@within(org.springframework.web.bind.annotation.RestController)") public void webLog() { } @Before("webLog()") public void doBefore(JoinPoint joinPoint) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest(); logger.info(" "); String replace = joinPoint.getSignature().getDeclaringTypeName().replace(".", "\"); File file = new File(System.getProperty("user.dir")+"/src/main/java/"+replace+".java"); String methodName = joinPoint.getSignature().getName(); StringBuilder result = new StringBuilder(); int i=1; if (isDev) { try{ BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));//构造一个BufferedReader类来读取文件 String s = null; while((s = br.readLine())!=null){//使用readLine方法,一次读一行 result.append( System.lineSeparator() + s); if (s.contains(methodName+"(")) { break; } i++; } br.close(); }catch(Exception e){ logger.info("已经打包,未读取到源码"); } } logger.info("------------Action Info Start------------"); logger.info("目标跳转类:-> "+joinPoint.getSignature().getDeclaringTypeName()+".("+joinPoint.getSignature().getDeclaringType().getSimpleName()+".java:"+i+")"); Map<String, String[]> parameterMap = request.getParameterMap(); Set<Entry<String, String[]>> entrySet = parameterMap.entrySet(); for (Entry<String, String[]> entry : entrySet) { try { logger.info("请求参数: -> "+entry.getKey()+" = "+entry.getValue()[0]); } catch (ArrayIndexOutOfBoundsException e) { } } } @AfterReturning(returning = "response", pointcut = "webLog()") public void doAfterReturning(Object response) throws Throwable { if (response != null) { try { logger.info("响应数据: -> " + mapper.writeValueAsString(response)); } catch (Exception e) { // TODO: handle exception } } logger.info("------------Action Info End------------"); logger.info(" "); } }