修改保存请求日志时,获取到的请求参数为null的情况
This commit is contained in:
@@ -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()) {
|
||||||
|
|||||||
@@ -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,11 +210,12 @@ 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
|
||||||
@@ -335,6 +407,7 @@ 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
|
||||||
@@ -343,12 +416,14 @@ public class SaveRequestLogThread implements Runnable {
|
|||||||
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
|
||||||
@@ -357,15 +432,18 @@ public class SaveRequestLogThread implements Runnable {
|
|||||||
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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user