1. 1 java 切面类
import com.alibaba.fastjson.JSON;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
/**
* 打印请求参数和返回结果
*/
@Aspect
@Configuration
public class LoggerAspect {
private Logger logger = LoggerFactory.getLogger(this.getClass());
// 定义切点Pointcut
@Pointcut("execution(* com.sendmsg.sendmsg.controller..*.*(..))")
public void executeService() {
}
@Around("executeService()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
RequestAttributes ra = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes sra = (ServletRequestAttributes) ra;
HttpServletRequest request = sra.getRequest();
String url = request.getRequestURL().toString();
String method = request.getMethod();
String uri = request.getRequestURI();
String queryString = request.getQueryString();
Object[] args = pjp.getArgs();
String params = "";
//获取请求参数集合并进行遍历拼接
if (args.length > 0) {
if ("POST".equals(method)) {
Object object = args[0];
Map map = getKeyAndValue(object);
params = JSON.toJSONString(map);
} else if ("GET".equals(method)) {
params = URLDecoder.decode(queryString, "UTF-8");
}
}
logger.info("==============================start==============================================");
logger.info("请求开始===uri:" + uri);
logger.info("请求开始===地址:" + url);
logger.info("请求开始===类型:" + method);
logger.info("请求开始===参数:" + params);
logger.info("===============================end===============================================");
// result的值就是被拦截方法的返回值
Object result = pjp.proceed();
logger.info("请求结束===返回值:" + JSON.toJSON(result));
return result;
}
public static Map<String, Object> getKeyAndValue(Object obj) {
Map<String, Object> map = new HashMap<>();
// 得到类对象
Class userCla = obj.getClass();
/* 得到类中的所有属性集合 */
Field[] fs = userCla.getDeclaredFields();
for (Field f : fs) {
f.setAccessible(true); // 设置些属性是可以访问的
Object val;
try {
val = f.get(obj);
// 得到此属性的值
map.put(f.getName(), val);// 设置键值
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
return map;
}
}
=====================上面表单提交时 有异常使用下面的===================
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.net.URLDecoder;
import java.util.Arrays;
/**
* 打印请求参数和返回结果
*/
@Aspect
@Configuration
@Slf4j
public class LoggerAspect {
// private Logger logger = LoggerFactory.getLogger(this.getClass());
// 定义切点Pointcut
@Pointcut(" execution(* com.shsnc.chatservice.admin.logincontroller.*..*(..)) " +
"|| execution(* com.shsnc.chatservice.admin.alarm.alarmcontroller.*..*(..))" + // 3
"|| execution(* com.shsnc.chatservice.admin.logincontroller.*..*(..)) " +
"|| execution(* com.shsnc.chatservice.admin.mobile.wechat.mobilewecharcontroller.*..*(..)) " +
"|| execution(* com.shsnc.chatservice.admin.wechat.wechartcontroller.*..*(..)) " +
"|| execution(* com.shsnc.chatservice.smicro.smicrocontroller.*..*(..)) " +
// "|| execution(* com.shsnc.chatservice.admin.pc.admin.*..*(..)) " +
// "|| execution(* com.shsnc.chatservice.admin.pc.admin.*..*(..)) " +
"")
public void executeService() {
}
@Around("executeService()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
RequestAttributes ra = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes sra = (ServletRequestAttributes) ra;
HttpServletRequest request = sra.getRequest();
String url = request.getRequestURL().toString();
String method = request.getMethod();
String uri = request.getRequestURI();
String queryString = request.getQueryString();
String targetMethodParams = Arrays.toString(pjp.getArgs());
String params = "";
//获取请求参数集合并进行遍历拼接
if (StrUtil.isNotBlank(targetMethodParams)) {
if ("POST".equals(method)) {
params = JSON.toJSONString(targetMethodParams);
} else if ("GET".equals(method)) {
params = URLDecoder.decode(queryString, "UTF-8");
}
}
log.info("==============================start================================================");
log.info("请求开始===uri:" + uri);
log.info("请求开始===地址:" + url);
log.info("请求开始===类型:" + method);
log.info("请求开始===参数:" + params);
log.info("===============================end=================================================");
// result的值就是被拦截方法的返回值
Object result = pjp.proceed();
log.info("===============================start===============================================");
log.info("请求结束===返回值:" + JSON.toJSON(result));
log.info("===============================end=================================================");
return result;
}
1.2 maven 切面依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.1 启动打印项目 url 及 swagger url
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;
import java.net.InetAddress;
import java.net.UnknownHostException;
@SpringBootApplication
@Slf4j
public class SendmsgApplication {
public static void main(String[] args) throws UnknownHostException{
ConfigurableApplicationContext application = SpringApplication.run(SendmsgApplication.class, args);
Environment env = application.getEnvironment();
String ip = InetAddress.getLocalHost().getHostAddress();
String port = env.getProperty("server.port");
String path = env.getProperty("server.servlet.context-path");
log.info("\n---------------------------------------------------------------------------------------------------\n\t" +
"Application chat-service is running! Access URLs:\n\t" +
"Local: \t\thttp://localhost:" + port + path + "\n\t" +
"External: \thttp://" + ip + ":" + port + path + "\n\t" +
// "Swagger文档: \thttp://" + ip + ":" + port + path + "doc.html\n" +
"----------------------------------------------------------------------------------------------------");
}
}
项目实例
百度网盘链接 : 提取码 7k7k
https://pan.baidu.com/s/1vinWaDt70cqohXyJKv100g?pwd=7k7k