当前位置: 首页 > news >正文

河南省建设网站网站建设视频教程网站

河南省建设网站,网站建设视频教程网站,物流网站的建设,广电网络公司营销推广方案文章目录如何优雅的打印项目日志原理实现日志打印Filter注入容器如何优雅的打印项目日志 框架 springboot 原理 使用filter拦截请求#xff0c;打印出请求、响应#xff0c;及耗时 知识点 1、OncePerRequestFilter Filter base class that aims to guarantee a single … 文章目录如何优雅的打印项目日志原理实现日志打印Filter注入容器如何优雅的打印项目日志 框架 springboot 原理 使用filter拦截请求打印出请求、响应及耗时 知识点 1、OncePerRequestFilter Filter base class that aims to guarantee a single execution per request dispatch, on any servlet container.Filter base class that aims to guarantee a single execution per request dispatch, on any servlet container. 过滤器基类旨在保证在任何 servlet 容器上每个请求调度一次执行。兼容多种servlet版本保证在任何 servlet 容器上每个请求调度一次执行。 2、ContentCachingRequestWrapperContentCachingResponseWrapper HttpServletRequest 包装器用于缓存从输入流和读取器读取的所有内容并允许通过字节数组检索此内容。 源代码如下第一次获取输入流时复制了一份 因为request的数据流只能读取一次通过过滤器读取一次后后面的业务处理会读不到数据 通过ContentCachingRequestWrapper将请求包装可以进行多次读取 实现 继承OncePerRequestFilter重写doFilterInternal方法 日志打印Filter import com.google.common.base.Throwables; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.util.ContentCachingRequestWrapper; import org.springframework.web.util.ContentCachingResponseWrapper;import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Enumeration;Slf4j public class LogFilter extends OncePerRequestFilter {private Integer printMaxSize;public LogFilter() {}public LogFilter(Integer printMaxSize) {if (printMaxSize null) {printMaxSize 1024;}this.printMaxSize printMaxSize;}Overrideprotected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {if (isAsyncDispatch(httpServletRequest)) {filterChain.doFilter(httpServletRequest, httpServletResponse);} else {doLogFilter(getRequestWrapper(httpServletRequest), getResponseWrapper(httpServletResponse), filterChain);}}private void doLogFilter(ContentCachingRequestWrapper requestWrapper, ContentCachingResponseWrapper responseWrapper, FilterChain filterChain) throws IOException, ServletException {StringBuilder sb new StringBuilder();sb.append(System.lineSeparator()).append(Method: [).append(requestWrapper.getMethod()).append(] ).append(URI: ).append(requestWrapper.getRequestURI()).append(System.lineSeparator());long start System.currentTimeMillis();filterChain.doFilter(requestWrapper, responseWrapper);try {sb.append(getParams(requestWrapper)).append(System.lineSeparator());sb.append(getBody(requestWrapper));sb.append(getResponse(responseWrapper)).append(System.lineSeparator());} catch (Exception e) {log.warn(日志打印失败 e:{}, Throwables.getStackTraceAsString(e));} finally {responseWrapper.copyBodyToResponse();long end System.currentTimeMillis();sb.append(use time :).append(end - start).append(ms);log.info(sb.toString());}}private String getBody(ContentCachingRequestWrapper requestWrapper) {StringBuilder sb new StringBuilder();String contentType requestWrapper.getContentType();if (requestWrapper.getMethod().equalsIgnoreCase(POST) (MediaType.APPLICATION_JSON_VALUE.equals(contentType)|| MediaType.APPLICATION_JSON_UTF8_VALUE.equals(contentType))) {sb.append(body: ).append(System.lineSeparator());sb.append(new String(requestWrapper.getContentAsByteArray(), StandardCharsets.UTF_8));sb.append(System.lineSeparator());}return sb.toString();}private String getResponse(ContentCachingResponseWrapper responseWrapper) {String responseStr new String(responseWrapper.getContentAsByteArray(), StandardCharsets.UTF_8);responseStr responseStr.length() printMaxSize ? responseStr.substring(0, printMaxSize) : responseStr;return response: responseStr;}private String getParams(ContentCachingRequestWrapper requestWrapper) {EnumerationString enumeration requestWrapper.getParameterNames();StringBuilder sb new StringBuilder();sb.append(params: );while (enumeration.hasMoreElements()) {String paramName enumeration.nextElement();sb.append(paramName);sb.append( : );sb.append(requestWrapper.getParameter(paramName));sb.append(, );}if (sb.length() 2) {sb.replace(sb.length() - 2, sb.length(), );}return sb.toString();}private ContentCachingResponseWrapper getResponseWrapper(HttpServletResponse httpServletResponse) {if (httpServletResponse instanceof ContentCachingResponseWrapper) {return (ContentCachingResponseWrapper) httpServletResponse;} else {return new ContentCachingResponseWrapper(httpServletResponse);}}private ContentCachingRequestWrapper getRequestWrapper(HttpServletRequest httpServletRequest) {if (httpServletRequest instanceof ContentCachingRequestWrapper) {return (ContentCachingRequestWrapper) httpServletRequest;} else {return new ContentCachingRequestWrapper(httpServletRequest, printMaxSize);}} } 注入容器 Configuration public class FilterConfig {/*** 日志长度限制*/private Integer printMaxSize 1024;Beanpublic LogFilter getLogFilter() {return new LogFilter(printMaxSize);}}
http://www.dnsts.com.cn/news/277722.html

相关文章:

  • 百度网站广告怎么做广东自助建站网站
  • 上海金融网站制作公成都企业seo
  • 基于html的网站开发艺术生搭建wordpress个人博客
  • 东营专业网站建设网站建设哪些好
  • 怎么进行网站维护滨州网站建设制作
  • 企点客户端象山网站优化公司
  • 常州市网站建设设计ui设计周末培训机构
  • 阜新门户网站建设搭建网站服务
  • 网站建设招标技术要求三亚做网站那家效果好
  • php网站开发专员招聘信息化工作总结 网站建设
  • 做网站手机验证收费吗运用photoshop设计网站首页
  • 做包装设计的网站有哪些eclipse做企业网站
  • 动态效果酷炫的网站企业管理咨询收费方案明细
  • 旅游景区网站建设的意义app制作公司
  • 松江企业做网站盐城市网站建设公司
  • 网站接口设置手机能看的网站
  • 南京网站建设公司排名查淘宝关键词排名软件有哪些
  • 做网站有什么必要服务商名称是什么意思
  • 站长之家网站素材《新闻联播》 今天
  • 大兴企业官网网站建设咨询wordpress+修改邮箱
  • 郑州做网站费用网站中的搜索框怎么做
  • 网站建设前台和后台设计东坑东莞微信网站建设
  • 腾讯云做的网站会被拦截么模拟网站平台怎么做
  • 免费二级网站常见的网页编辑工具
  • 吉林省建设网站四川法制建设网站
  • 备案号 网站wordpress 写博客
  • 沈阳网站制作公司和服务器长春网站建设 找源晟
  • 网站建设需要掌握什么技术郑州正云网站建设
  • 吉林省建设工程监理检测网站网络舆情处置公司
  • 中国建设银行网站登陆在百度上怎么发布信息