既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
Long endTime = System.currentTimeMillis();
// 从HttpServletRequest获取开始时间
Long startTime = (Long) request.getAttribute("_startTime");
// 打印接口信息及耗时
log.info("{} {};耗时:{}s", ServletUtil.getClientIP(request, ""), getFullUrl(request), ((endTime - startTime) * 1.000) / 1000);
}
/**
* 获取完整的URL路径
*
* @param request 请求对象{@link HttpServletRequest}
* @return 完整的URL路径
*/
private String getFullUrl(HttpServletRequest request) {
//记录请求参数
StringBuilder sb = new StringBuilder();
String method = request.getMethod();
sb.append(method).append(" ");
sb.append(request.getRequestURL().toString());
if (RequestMethod.POST.name().equals(method)) {
//获取参数
Map<String, String[]> pm = request.getParameterMap();
Set<Map.Entry<String, String[]>> es = pm.entrySet();
Iterator<Map.Entry<String, String[]>> iterator = es.iterator();
int pointer = 0;
while (iterator.hasNext()) {
if (pointer == 0) {
sb.append("?");
} else {
sb.append("&");
}
Map.Entry<String, String[]> next = iterator.next();
String key = next.getKey();
String[] value = next.getValue();
for (int i = 0; i < value.length; i++) {
if (i != 0) {
sb.append("&");
}
if (value[i].length() <= 20) {
sb.append(key).append("=").append(value[i]);
} else {
sb.append(key).append("=").append(StrUtil.subPre(value[i], 20)).append("…");
}
}
pointer++;
}
}
return sb.toString();
}
}
第二步:添加拦截器到Config文件
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
/**
-
Web Mvc配置文件
-
@author chqiu
*/
@Slf4j
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {// ……其他配置……
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(
new TimeConsumingInterceptor())
// 需拦截的URI配置
.addPathPatterns(“/“)
// 不需拦截的URI配置
.excludePathPatterns(”/swagger/”, “/static/", "/resource/”);
}
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**