1:导入对应的包
在maven xml文件中加入
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
2: 在spring-mvc.xml中加入
<!-- 启动AspectJ支持 只对扫描过的bean有效--> <aop:aspectj-autoproxy proxy-target-class="true" />
3:创建LogInterceptor文件
package com.xcd.zc.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.xcd.zc.utils.CommonPropertyUtil;
import com.xcd.zc.utils.CommonUtils;
import com.xcd.zc.utils.JdkVersionUtil;
import org.apache.commons.lang.text.StrBuilder;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @Project : crowdfunding
* @Program Name : com.xcd.zc.interceptor
* @Description : 日志管理
* @Author : 关洪昌
* @Creation Date : 2018/7/19 18:19
* @Iteration : 1.23
* @ModificationHistory who when what
* 关洪昌 2018/7/19 create
*/
@Component
@Aspect
public class LogInterceptor {
@Resource
private HttpServletRequest request;
public Log log = LogFactory.getLog(LogInterceptor.class);
@Pointcut("execution(* com.xcd.zc.controller*..*(..))")
public void log() {
log.info(request.getParameterMap());
}
@AfterReturning(pointcut = "log()", returning = "returnValue")
public void afterReturning(JoinPoint joinPoint, Object returnValue) {
if (StringUtils.equals(CommonPropertyUtil.getProperty("environment"), "DEV")) {
devEnvironmentLog(joinPoint, returnValue);
} else {
productEnvironmentLog(joinPoint, returnValue);
}
}
/**
* @Description: 开发环境console打印信息
* @Param:
* @return:
* @Author: 关洪昌
* @Date: 2018/7/20
*/
private void devEnvironmentLog(JoinPoint joinPoint, Object returnValue) {
StringBuilder sb = new StringBuilder("\nSpringMVC action report -------- ")
.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))
.append(" ------------------------------\n");
sb.append(getController(joinPoint));
sb.append(getMethod(joinPoint));
sb.append(getUri());
sb.append(getParameter(joinPoint));
sb.append("RemoteAddr : " + CommonUtils.getIpAddr(request) + "\n");
sb.append(getReturn(returnValue));
sb.append("--------------------------------------------------------------------------------\n");
System.out.print(sb.toString());
}
/**
* @Description: 正式环境打印的信息
* @Param:
* @return:
* @Author: 关洪昌
* @Date: 2018/7/20
*/
private void productEnvironmentLog(JoinPoint joinPoint, Object returnValue) {
StringBuilder sb = new StringBuilder();
sb.append(request.getRequestURI()).append(", ");
sb.append("IP: " + CommonUtils.getIpAddr(request)).append(", [");
Map<String, String[]> parameters = request.getParameterMap();
for (Map.Entry<String, String[]> entity : parameters.entrySet()) {
sb.append(String.format("%s = %s, ", entity.getKey(), StringUtils.join(entity.getValue(), ',')));
}
sb.delete(sb.length() - 2, sb.length()).append("]");
log.info(sb.toString());
}
private Map<String, MultipartFile> getRequestFileMap(JoinPoint joinPoint) {
Map<String, MultipartFile> fileMap = null;
if (JdkVersionUtil.isJava8()) {
Object[] args = joinPoint.getArgs();
for (Object object : args) {
if (object instanceof MultipartHttpServletRequest) {
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) object;
fileMap = multipartHttpServletRequest.getFileMap();
break;
}
}
}
return fileMap;
}
private String getController(JoinPoint joinPoint) {
return new StringBuffer().append("Controller : ").append(joinPoint.getTarget().getClass().getName()).append(".(")
.append(joinPoint.getTarget().getClass().getSimpleName()).append(".java:1)").toString();
}
private String getMethod(JoinPoint joinPoint) {
return new StringBuffer().append("\nMethod : ").append(joinPoint.getSignature().getName()).append("\n").toString();
}
private String getUri() {
String uri = request.getRequestURI();
if (uri != null) {
return new StringBuffer().append("url : ").append(uri)
.append(" user=" + request.getRemoteUser()).append("\n").toString();
}
return "";
}
private String getParameter(JoinPoint joinPoint) {
StringBuffer sb = new StringBuffer();
Map<String, MultipartFile> fileMap = getRequestFileMap(joinPoint);
Enumeration<String> e = request.getParameterNames();
if (e.hasMoreElements() || (fileMap != null && fileMap.size() > 0)) {
sb.append("Parameter : ");
while (e.hasMoreElements()) {
String name = e.nextElement();
String[] values = request.getParameterValues(name);
if (values.length == 1) {
sb.append(name).append("=").append(values[0]);
} else {
sb.append(name).append("[]={");
for (int i = 0; i < values.length; i++) {
if (i > 0)
sb.append(",");
sb.append(values[i]);
}
sb.append("}");
}
sb.append(" ");
}
if (fileMap != null && fileMap.size() > 0) {
for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) {
MultipartFile file = entry.getValue();
sb.append(entry.getKey()).append("=").append(file.getOriginalFilename());
sb.append(" (contentType=" + file.getContentType() + ",size=" + file.getSize() + ")");
sb.append(" ");
}
}
sb.append("\n");
}
return sb.toString();
}
private String getReturn(Object returnValue) {
StringBuffer sb = new StringBuffer();
String returnJSON = "";
returnJSON = JSONObject.toJSONString(returnValue);
sb.append("return : " + returnJSON);
sb.append("\n");
return sb.toString();
}
}
其中获取ip地址的代码为
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader( "x-forwarded-for" );
if (ip == null || ip.length() == 0 || " unknown " .equalsIgnoreCase(ip)) {
ip = request.getHeader( "Proxy-Client-IP" );
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader( "WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if (ip.equals("0:0:0:0:0:0:0:1")){
ip = "127.0.0.1";
}
return ip;
}
最终运行打印的效果为:
SpringMVC action report -------- 2018-07-20 11:27:44 ------------------------------
Controller : com.xcd.zc.controller.UserJoinController.(UserJoinController.java:1)
Method : saveImg
url : /userJoin/saveImg
Parameter : id=1 userId=1 paymentCertificate=Penguins.jpg (contentType=image/jpeg,size=777835)
RemoteAddr : 127.0.0.1
return : 1