apk打包工具,海口seo推广公司,中小企业网站制作过程中要注意什么,湖州城市投资建设集团网站在分布式系统或者较为复杂的系统中#xff0c;我们希望可以看到一个客户请求的处理过程所涉及到的所有子系统\模块的处理日志。由于slf4j/log4j基本是日志记录的标准组件#xff0c;所以slf4j/log4j成为了我的重点研究对象。slf4j/log4j支持MDC#xff0c;可以实现同一请求的…在分布式系统或者较为复杂的系统中我们希望可以看到一个客户请求的处理过程所涉及到的所有子系统\模块的处理日志。由于slf4j/log4j基本是日志记录的标准组件所以slf4j/log4j成为了我的重点研究对象。slf4j/log4j支持MDC可以实现同一请求的日志追踪功能。基本思路是实现自定义Filter在接受到http请求时计算eventID并存储在MDC中。如果涉及分布式多系统那么向其他子系统发送请求时需要携带此eventID。源代码https://github.com/athinboy/studyjava.git其中response.setHeader(eventsign, eventsign);很有用返回的response中将有httpheadereventsign:000010x1489108079237log4j日志格式配置为log4j.appender.stdout.layout.ConversionPattern%d %logger-%5p - %X{eventid} - %m%n在web.xml中配置自定义filter:1 2 3 log4jfilter4 org.fgq.study.log4j.Log4jFilter5 6 sign7 000010x8 9 10 11 log4jfilter12 /*13 14 web.xml配置doFilterInternal方法1 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throwsServletException, IOException {23 String eventsign;45 if (request.getHeader(eventsign) null || request.getHeader(eventsign).length() 0) {6 eventsign this.sign String.valueOf(new Date().getTime()); //计算eventID78 logger.error(set eventid: eventsign);9 } else{10 eventsign request.getHeader(eventsign);//从请求端获取eventsign11 logger.error(get eventid from request: eventsign);1213 }1415 MDC.put(eventid, eventsign);16 response.setHeader(eventsign, eventsign);17 filterChain.doFilter(request, response);181920 }Log4jFilter-doFilterInternal测试结果1、Request URL:http://localhost:8084/spmvc/index.htmlRequest Method:GETStatus Code:304 Not ModifiedRemote Address:[::1]:8084Response HeadersDate:Fri, 10 Mar 2017 03:20:01 GMTETag:W/660-1489115626000eventsign:000010x1489116001756服务器端日志2017-03-10 11:20:01,756 org.fgq.study.log4j.Log4jFilter.doFilterInternal(Log4jFilter.java:59)ogger-ERROR - - set eventid:000010x14891160017562、Request URL:http://localhost:8084/spmvc/mv/mvc/time?id1Request Method:GETStatus Code:200 OKRemote Address:[::1]:8084Response HeadersContent-Language:zh-CNContent-Type:text/html;charsetutf-8Date:Fri, 10 Mar 2017 03:21:02 GMTServer:Apache-Coyote/1.1Transfer-Encoding:chunkedRequest HeadersAccept:*/*Accept-Encoding:gzip, deflate, sdch, brAccept-Language:zh-CN,zh;q0.8Connection:keep-aliveCookie:eryewrhuewreventsign:eventsignOfQequest服务器端日志2017-03-10 11:21:02,378 org.fgq.study.log4j.Log4jFilter.doFilterInternal(Log4jFilter.java:62)ogger-ERROR - - get eventid from request:eventsignOfQequest2017-03-10 11:21:02,555 org.fgq.study.controller.TimeController.ShowTime(TimeController.java:34)ogger- WARN - 000010xeventsignOfQequest - get eventid:eventsignOfQequest, send request to other sub system ,and with the eventid!返回内容the eventsign is : eventsignOfQequest参考 https://logback.qos.ch/manual/mdc.html