修改保存请求日志时,获取到的请求参数为null的情况

This commit is contained in:
RenKaiGe-Office
2018-07-10 11:30:37 +08:00
parent d3901bb713
commit d2700baa1d
2 changed files with 150 additions and 48 deletions

View File

@@ -1,7 +1,10 @@
package com.nis.interceptor; package com.nis.interceptor;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@@ -23,23 +26,44 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
private static final ThreadLocal<Long> timeThreadLocal = new NamedThreadLocal<Long>("ThreadLocal StartTime"); private static final ThreadLocal<Long> timeThreadLocal = new NamedThreadLocal<Long>("ThreadLocal StartTime");
/**
* 复制输入流
* @param inputStream
* @return
*/
public static InputStream cloneInputStream(ServletInputStream inputStream) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
try {
while ((len = inputStream.read(buffer)) > -1) {
byteArrayOutputStream.write(buffer, 0, len);
}
byteArrayOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
InputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
return byteArrayInputStream;
}
/** /**
* 获取非get请求的参数 * 获取非get请求的参数
* @param request * @param request
* @return * @return
*/ */
private static String getBodyString(ServletRequest request) { private static String getBodyString(ServletRequest request) {
ServletInputStream inputStream = null; StringBuilder sb = new StringBuilder();
StringBuffer sb = new StringBuffer(); InputStream inputStream = null;
BufferedReader reader = null; BufferedReader reader = null;
try { try {
inputStream = request.getInputStream(); inputStream = cloneInputStream(request.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8"))); reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
String line = ""; String line = "";
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
sb.append(line); sb.append(line);
} }
} catch (Exception e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
if (inputStream != null) { if (inputStream != null) {
@@ -64,8 +88,8 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception { throws Exception {
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
logger.info("请求路径是:" + requestURI); // logger.info("请求路径是:" + requestURI);
logger.info("请求参数是:" + getBodyString(request)); // logger.info("请求参数是:" + getBodyString(request));
long beginTime = System.currentTimeMillis();// 1、开始时间 long beginTime = System.currentTimeMillis();// 1、开始时间
timeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见) timeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见)
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {

View File

@@ -9,9 +9,16 @@
package com.nis.web.service; package com.nis.web.service;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Date; import java.util.Date;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@@ -27,7 +34,7 @@ import com.nis.datasource.CustomerContextHolder;
* @version V1.0 * @version V1.0
*/ */
public class SaveRequestLogThread implements Runnable { public class SaveRequestLogThread implements Runnable {
private Logger logger=Logger.getLogger(SaveRequestLogThread.class); private Logger logger = Logger.getLogger(SaveRequestLogThread.class);
private ServicesRequestLogService service; private ServicesRequestLogService service;
private String remoteAddr; private String remoteAddr;
private String requestURI; private String requestURI;
@@ -43,26 +50,31 @@ public class SaveRequestLogThread implements Runnable {
private int businessCode; private int businessCode;
private String exceptionInfo; private String exceptionInfo;
private String traceCode; private String traceCode;
/* (non-Javadoc) /*
* (non-Javadoc)
*
* @see java.lang.Runnable#run() * @see java.lang.Runnable#run()
*/ */
@Override @Override
public void run() { public void run() {
logger.info("线程开始执行!"); logger.info("线程开始执行!");
//新开线程切换数据源不影响action中的数据源 // 新开线程切换数据源不影响action中的数据源
CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);//开启数据源B CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);// 开启数据源B
// TODO Auto-generated method stub // TODO Auto-generated method stub
if(service!=null){ if (service != null) {
service.saveRequestLog(remoteAddr,requestURI,queryString,contextPath, operator, version, opAction, opTime, content, requestTime, consumerTime,businessCode,exceptionInfo,traceCode); service.saveRequestLog(remoteAddr, requestURI, queryString, contextPath, operator, version, opAction,
}else{ opTime, content, requestTime, consumerTime, businessCode, exceptionInfo, traceCode);
} else {
logger.error("service 为空!"); logger.error("service 为空!");
} }
CustomerContextHolder.clearCustomerType(); CustomerContextHolder.clearCustomerType();
} }
public SaveRequestLogThread(){
public SaveRequestLogThread() {
super(); super();
} }
/** /**
* 创建一个新的实例 SaveRequestLogThread. * 创建一个新的实例 SaveRequestLogThread.
* *
@@ -80,7 +92,7 @@ public class SaveRequestLogThread implements Runnable {
*/ */
public SaveRequestLogThread(ServicesRequestLogService service, String remoteAddr, String requestURI, public SaveRequestLogThread(ServicesRequestLogService service, String remoteAddr, String requestURI,
String queryString, String contextPath, String operator, String version, int opAction, Date opTime, String queryString, String contextPath, String operator, String version, int opAction, Date opTime,
Object content, Date requestTime, long consumerTime,String exceptionInfo) { Object content, Date requestTime, long consumerTime, String exceptionInfo) {
super(); super();
this.service = service; this.service = service;
this.remoteAddr = remoteAddr; this.remoteAddr = remoteAddr;
@@ -94,10 +106,11 @@ public class SaveRequestLogThread implements Runnable {
this.content = content; this.content = content;
this.requestTime = requestTime; this.requestTime = requestTime;
this.consumerTime = consumerTime; this.consumerTime = consumerTime;
this.exceptionInfo=exceptionInfo; this.exceptionInfo = exceptionInfo;
} }
public SaveRequestLogThread(ServicesRequestLogService service,String operator, String version, int opAction, Date opTime,
Object content, Date requestTime, long consumerTime,String exceptionInfo) { public SaveRequestLogThread(ServicesRequestLogService service, String operator, String version, int opAction,
Date opTime, Object content, Date requestTime, long consumerTime, String exceptionInfo) {
super(); super();
this.service = service; this.service = service;
this.operator = operator; this.operator = operator;
@@ -107,30 +120,88 @@ public class SaveRequestLogThread implements Runnable {
this.content = content; this.content = content;
this.requestTime = requestTime; this.requestTime = requestTime;
this.consumerTime = consumerTime; this.consumerTime = consumerTime;
this.exceptionInfo=exceptionInfo; this.exceptionInfo = exceptionInfo;
} }
public static SaveRequestLogThread getNewSaveRequestLogThread(HttpServletRequest request){ public static InputStream cloneInputStream(ServletInputStream inputStream) {
SaveRequestLogThread thread=new SaveRequestLogThread(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
try {
while ((len = inputStream.read(buffer)) > -1) {
byteArrayOutputStream.write(buffer, 0, len);
}
byteArrayOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
InputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
return byteArrayInputStream;
}
/**
* 获取非get请求的参数
* @param request
* @return
*/
private static String getBodyString(ServletRequest request) {
StringBuilder sb = new StringBuilder();
InputStream inputStream = null;
BufferedReader reader = null;
try {
inputStream = cloneInputStream(request.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
public static SaveRequestLogThread getNewSaveRequestLogThread(HttpServletRequest request) {
SaveRequestLogThread thread = new SaveRequestLogThread();
thread.setRemoteAddr(request.getRemoteAddr()); thread.setRemoteAddr(request.getRemoteAddr());
thread.setRequestURI(request.getRequestURI()); thread.setRequestURI(request.getRequestURI());
thread.setQueryString(request.getQueryString()); if (request.getMethod().toLowerCase().equals("get")) {
thread.setQueryString(request.getQueryString());
} else {
thread.setQueryString(getBodyString(request));
}
thread.setContextPath(request.getContextPath()); thread.setContextPath(request.getContextPath());
thread.setRequestTime(new Date()); thread.setRequestTime(new Date());
BufferedReader reader=null; BufferedReader reader = null;
String line=null; String line = null;
StringBuilder bulider=new StringBuilder(); StringBuilder bulider = new StringBuilder();
try { try {
reader=request.getReader(); reader = request.getReader();
while((line=reader.readLine())!=null){ while ((line = reader.readLine()) != null) {
bulider.append(new String(line.getBytes(),"utf-8")); bulider.append(new String(line.getBytes(), "utf-8"));
bulider.append("\n"); bulider.append("\n");
} }
} catch (IOException e) { } catch (IOException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
}finally{ } finally {
if(reader!=null){ if (reader != null) {
try { try {
reader.close(); reader.close();
} catch (IOException e) { } catch (IOException e) {
@@ -139,16 +210,17 @@ public class SaveRequestLogThread implements Runnable {
} }
} }
} }
if(bulider.toString().length()>0){ if (bulider.toString().length() > 0) {
thread.setContent(bulider.toString()); thread.setContent(bulider.toString());
} }
return thread; return thread;
} }
/** /**
* service * service
* @return service * @return service
*/ */
public ServicesRequestLogService getService() { public ServicesRequestLogService getService() {
return service; return service;
} }
@@ -164,7 +236,7 @@ public class SaveRequestLogThread implements Runnable {
* remoteAddr * remoteAddr
* @return remoteAddr * @return remoteAddr
*/ */
public String getRemoteAddr() { public String getRemoteAddr() {
return remoteAddr; return remoteAddr;
} }
@@ -180,7 +252,7 @@ public class SaveRequestLogThread implements Runnable {
* requestURI * requestURI
* @return requestURI * @return requestURI
*/ */
public String getRequestURI() { public String getRequestURI() {
return requestURI; return requestURI;
} }
@@ -196,7 +268,7 @@ public class SaveRequestLogThread implements Runnable {
* queryString * queryString
* @return queryString * @return queryString
*/ */
public String getQueryString() { public String getQueryString() {
return queryString; return queryString;
} }
@@ -212,7 +284,7 @@ public class SaveRequestLogThread implements Runnable {
* contextPath * contextPath
* @return contextPath * @return contextPath
*/ */
public String getContextPath() { public String getContextPath() {
return contextPath; return contextPath;
} }
@@ -228,7 +300,7 @@ public class SaveRequestLogThread implements Runnable {
* operator * operator
* @return operator * @return operator
*/ */
public String getOperator() { public String getOperator() {
return operator; return operator;
} }
@@ -244,7 +316,7 @@ public class SaveRequestLogThread implements Runnable {
* version * version
* @return version * @return version
*/ */
public String getVersion() { public String getVersion() {
return version; return version;
} }
@@ -260,7 +332,7 @@ public class SaveRequestLogThread implements Runnable {
* opAction * opAction
* @return opAction * @return opAction
*/ */
public int getOpAction() { public int getOpAction() {
return opAction; return opAction;
} }
@@ -276,7 +348,7 @@ public class SaveRequestLogThread implements Runnable {
* opTime * opTime
* @return opTime * @return opTime
*/ */
public Date getOpTime() { public Date getOpTime() {
return opTime; return opTime;
} }
@@ -292,7 +364,7 @@ public class SaveRequestLogThread implements Runnable {
* content * content
* @return content * @return content
*/ */
public Object getContent() { public Object getContent() {
return content; return content;
} }
@@ -308,7 +380,7 @@ public class SaveRequestLogThread implements Runnable {
* requestTime * requestTime
* @return requestTime * @return requestTime
*/ */
public Date getRequestTime() { public Date getRequestTime() {
return requestTime; return requestTime;
} }
@@ -324,7 +396,7 @@ public class SaveRequestLogThread implements Runnable {
* consumerTime * consumerTime
* @return consumerTime * @return consumerTime
*/ */
public long getConsumerTime() { public long getConsumerTime() {
return consumerTime; return consumerTime;
} }
@@ -335,39 +407,45 @@ public class SaveRequestLogThread implements Runnable {
public void setConsumerTime(long consumerTime) { public void setConsumerTime(long consumerTime) {
this.consumerTime = consumerTime; this.consumerTime = consumerTime;
} }
/** /**
* businessCode * businessCode
* @return businessCode * @return businessCode
*/ */
public int getBusinessCode() { public int getBusinessCode() {
return businessCode; return businessCode;
} }
/** /**
* @param businessCode the businessCode to set * @param businessCode the businessCode to set
*/ */
public void setBusinessCode(int businessCode) { public void setBusinessCode(int businessCode) {
this.businessCode = businessCode; this.businessCode = businessCode;
} }
/** /**
* exceptionInfo * exceptionInfo
* @return exceptionInfo * @return exceptionInfo
*/ */
public String getExceptionInfo() { public String getExceptionInfo() {
return exceptionInfo; return exceptionInfo;
} }
/** /**
* @param exceptionInfo the exceptionInfo to set * @param exceptionInfo the exceptionInfo to set
*/ */
public void setExceptionInfo(String exceptionInfo) { public void setExceptionInfo(String exceptionInfo) {
this.exceptionInfo = exceptionInfo; this.exceptionInfo = exceptionInfo;
} }
public String getTraceCode() { public String getTraceCode() {
return traceCode; return traceCode;
} }
public void setTraceCode(String traceCode) { public void setTraceCode(String traceCode) {
this.traceCode = traceCode; this.traceCode = traceCode;
} }
} }