From b0f5a88151377c0e9a891a03d3c1d9e97e227800 Mon Sep 17 00:00:00 2001 From: "Yangkai.Shen" <237497819@qq.com> Date: Fri, 26 Aug 2022 12:10:09 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=97=A5=E5=BF=97=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=B9=8B=20aop=E6=97=A5=E5=BF=97=E6=8B=A6=E6=88=AA=20?= =?UTF-8?q?=E6=A1=88=E4=BE=8B=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-log-aop/.gitignore | 25 -- demo-log-aop/README.md | 281 --------------------- demo-log-aop/pom.xml | 76 ------ demo-log-aop/src/main/resources/logback-spring.xml | 77 ------ .../aop/SpringBootDemoLogAopApplicationTests.java | 16 -- demo-log/demo-log-aop/README.md | 209 +++++++++++++++ demo-log/demo-log-aop/pom.xml | 69 +++++ .../com/xkcoding/log/aop/LogAopApplication.java | 8 +- .../java/com/xkcoding/log/aop/aspectj/AopLog.java | 51 +--- .../log/aop/controller/TestController.java | 8 +- .../java/com/xkcoding/log/aop/model/LogData.java | 63 +++++ .../src/main/resources/application.yml | 0 .../src/main/resources/logback-spring.xml | 77 ++++++ .../xkcoding/log/aop/LogAopApplicationTests.java | 13 + demo-log/pom.xml | 1 + pom.xml | 1 - 16 files changed, 447 insertions(+), 528 deletions(-) delete mode 100644 demo-log-aop/.gitignore delete mode 100644 demo-log-aop/README.md delete mode 100644 demo-log-aop/pom.xml delete mode 100644 demo-log-aop/src/main/resources/logback-spring.xml delete mode 100644 demo-log-aop/src/test/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplicationTests.java create mode 100644 demo-log/demo-log-aop/README.md create mode 100644 demo-log/demo-log-aop/pom.xml rename demo-log-aop/src/main/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplication.java => demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/LogAopApplication.java (61%) rename {demo-log-aop => demo-log/demo-log-aop}/src/main/java/com/xkcoding/log/aop/aspectj/AopLog.java (79%) rename {demo-log-aop => demo-log/demo-log-aop}/src/main/java/com/xkcoding/log/aop/controller/TestController.java (91%) create mode 100644 demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/model/LogData.java rename {demo-log-aop => demo-log/demo-log-aop}/src/main/resources/application.yml (100%) create mode 100644 demo-log/demo-log-aop/src/main/resources/logback-spring.xml create mode 100644 demo-log/demo-log-aop/src/test/java/com/xkcoding/log/aop/LogAopApplicationTests.java diff --git a/demo-log-aop/.gitignore b/demo-log-aop/.gitignore deleted file mode 100644 index 82eca33..0000000 --- a/demo-log-aop/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -/target/ -!.mvn/wrapper/maven-wrapper.jar - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/build/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ \ No newline at end of file diff --git a/demo-log-aop/README.md b/demo-log-aop/README.md deleted file mode 100644 index 14fea80..0000000 --- a/demo-log-aop/README.md +++ /dev/null @@ -1,281 +0,0 @@ -# spring-boot-demo-log-aop - -> 此 demo 主要是演示如何使用 aop 切面对请求进行日志记录,并且记录 UserAgent 信息。 - -## pom.xml - -```xml - - - 4.0.0 - - spring-boot-demo-log-aop - 1.0.0-SNAPSHOT - jar - - spring-boot-demo-log-aop - Demo project for Spring Boot - - - com.xkcoding - spring-boot-demo - 1.0.0-SNAPSHOT - - - - UTF-8 - UTF-8 - 1.8 - - - - - com.google.guava - guava - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-aop - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.projectlombok - lombok - true - - - - cn.hutool - hutool-all - - - - - eu.bitwalker - UserAgentUtils - - - - - spring-boot-demo-log-aop - - - org.springframework.boot - spring-boot-maven-plugin - - - - - -``` - -## AopLog.java - -```java -/** - *

- * 使用 aop 切面记录请求日志信息 - *

- * - * @author yangkai.shen - * @author chen qi - * @date Created in 2018-10-01 22:05 - */ -@Aspect -@Component -@Slf4j -public class AopLog { - /** - * 切入点 - */ - @Pointcut("execution(public * com.xkcoding.log.aop.controller.*Controller.*(..))") - public void log() { - - } - - /** - * 环绕操作 - * - * @param point 切入点 - * @return 原方法返回值 - * @throws Throwable 异常信息 - */ - @Around("log()") - public Object aroundLog(ProceedingJoinPoint point) throws Throwable { - - // 开始打印请求日志 - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - HttpServletRequest request = Objects.requireNonNull(attributes).getRequest(); - - // 打印请求相关参数 - long startTime = System.currentTimeMillis(); - Object result = point.proceed(); - String header = request.getHeader("User-Agent"); - UserAgent userAgent = UserAgent.parseUserAgentString(header); - - final Log l = Log.builder() - .threadId(Long.toString(Thread.currentThread().getId())) - .threadName(Thread.currentThread().getName()) - .ip(getIp(request)) - .url(request.getRequestURL().toString()) - .classMethod(String.format("%s.%s", point.getSignature().getDeclaringTypeName(), - point.getSignature().getName())) - .httpMethod(request.getMethod()) - .requestParams(getNameAndValue(point)) - .result(result) - .timeCost(System.currentTimeMillis() - startTime) - .userAgent(header) - .browser(userAgent.getBrowser().toString()) - .os(userAgent.getOperatingSystem().toString()).build(); - - log.info("Request Log Info : {}", JSONUtil.toJsonStr(l)); - - return result; - } - - /** - * 获取方法参数名和参数值 - * @param joinPoint - * @return - */ - private Map getNameAndValue(ProceedingJoinPoint joinPoint) { - - final Signature signature = joinPoint.getSignature(); - MethodSignature methodSignature = (MethodSignature) signature; - final String[] names = methodSignature.getParameterNames(); - final Object[] args = joinPoint.getArgs(); - - if (ArrayUtil.isEmpty(names) || ArrayUtil.isEmpty(args)) { - return Collections.emptyMap(); - } - if (names.length != args.length) { - log.warn("{}方法参数名和参数值数量不一致", methodSignature.getName()); - return Collections.emptyMap(); - } - Map map = Maps.newHashMap(); - for (int i = 0; i < names.length; i++) { - map.put(names[i], args[i]); - } - return map; - } - - private static final String UNKNOWN = "unknown"; - - /** - * 获取ip地址 - */ - public static String getIp(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(); - } - String comma = ","; - String localhost = "127.0.0.1"; - if (ip.contains(comma)) { - ip = ip.split(",")[0]; - } - if (localhost.equals(ip)) { - // 获取本机真正的ip地址 - try { - ip = InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { - log.error(e.getMessage(), e); - } - } - return ip; - } - - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - static class Log { - // 线程id - private String threadId; - // 线程名称 - private String threadName; - // ip - private String ip; - // url - private String url; - // http方法 GET POST PUT DELETE PATCH - private String httpMethod; - // 类方法 - private String classMethod; - // 请求参数 - private Object requestParams; - // 返回参数 - private Object result; - // 接口耗时 - private Long timeCost; - // 操作系统 - private String os; - // 浏览器 - private String browser; - // user-agent - private String userAgent; - } -} -``` - -## TestController.java - -```java -/** - *

- * 测试 Controller - *

- * - * @author yangkai.shen - * @author chen qi - * @date Created in 2018-10-01 22:10 - */ -@Slf4j -@RestController -public class TestController { - - /** - * 测试方法 - * - * @param who 测试参数 - * @return {@link Dict} - */ - @GetMapping("/test") - public Dict test(String who) { - return Dict.create().set("who", StrUtil.isBlank(who) ? "me" : who); - } - - /** - * 测试post json方法 - * @param map 请求的json参数 - * @return {@link Dict} - */ - @PostMapping("/testJson") - public Dict testJson(@RequestBody Map map) { - - final String jsonStr = JSONUtil.toJsonStr(map); - log.info(jsonStr); - return Dict.create().set("json", map); - } -} -``` - diff --git a/demo-log-aop/pom.xml b/demo-log-aop/pom.xml deleted file mode 100644 index a01664f..0000000 --- a/demo-log-aop/pom.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - 4.0.0 - - demo-log-aop - 1.0.0-SNAPSHOT - jar - - demo-log-aop - Demo project for Spring Boot - - - com.xkcoding - spring-boot-demo - 1.0.0-SNAPSHOT - - - - UTF-8 - UTF-8 - 1.8 - - - - - - com.google.guava - guava - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-aop - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.projectlombok - lombok - true - - - - cn.hutool - hutool-all - - - - - eu.bitwalker - UserAgentUtils - - - - - demo-log-aop - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/demo-log-aop/src/main/resources/logback-spring.xml b/demo-log-aop/src/main/resources/logback-spring.xml deleted file mode 100644 index 86bf301..0000000 --- a/demo-log-aop/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - INFO - - - %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n - UTF-8 - - - - - - - - ERROR - - DENY - - ACCEPT - - - - - - - logs/demo-log-aop/info.created_on_%d{yyyy-MM-dd}.part_%i.log - - 90 - - - - - 2MB - - - - - - - %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n - UTF-8 - - - - - - - Error - - - - - - - logs/demo-log-aop/error.created_on_%d{yyyy-MM-dd}.part_%i.log - - 90 - - - 2MB - - - - %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n - UTF-8 - - - - - - - - - diff --git a/demo-log-aop/src/test/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplicationTests.java b/demo-log-aop/src/test/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplicationTests.java deleted file mode 100644 index af44ad9..0000000 --- a/demo-log-aop/src/test/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xkcoding.log.aop; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class SpringBootDemoLogAopApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/demo-log/demo-log-aop/README.md b/demo-log/demo-log-aop/README.md new file mode 100644 index 0000000..d3dfcfd --- /dev/null +++ b/demo-log/demo-log-aop/README.md @@ -0,0 +1,209 @@ +## spring-boot-demo-log-aop + +> 此 demo 主要是演示如何使用 aop 切面对请求进行日志记录,并且记录 UserAgent 信息。 + +### 1.开发步骤 + +#### 1.1.添加依赖 + +```xml + + + com.xkcoding + common-tools + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-aop + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.projectlombok + lombok + true + + + + + eu.bitwalker + UserAgentUtils + 1.21 + + +``` + +#### 1.2.添加切面拦截 + +```java +@Slf4j +@Aspect +@Component +public class AopLog { + /** + * 切入点 + */ + @Pointcut("execution(public * com.xkcoding.log.aop.controller.*Controller.*(..))") + public void log() { + + } + + /** + * 环绕操作 + * + * @param point 切入点 + * @return 原方法返回值 + * @throws Throwable 异常信息 + */ + @Around("log()") + public Object aroundLog(ProceedingJoinPoint point) throws Throwable { + // 开始打印请求日志 + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = Objects.requireNonNull(attributes).getRequest(); + + // 打印请求相关参数 + long startTime = System.currentTimeMillis(); + Object result = point.proceed(); + String header = request.getHeader("User-Agent"); + UserAgent userAgent = UserAgent.parseUserAgentString(header); + + LogData logData = LogData.builder() + .threadId(Long.toString(Thread.currentThread().getId())) + .threadName(Thread.currentThread().getName()) + .ip(getIp(request)) + .url(request.getRequestURL().toString()) + .classMethod(String.format("%s.%s", point.getSignature().getDeclaringTypeName(), + point.getSignature().getName())) + .httpMethod(request.getMethod()) + .requestParams(getNameAndValue(point)) + .result(result) + .timeCost(System.currentTimeMillis() - startTime) + .userAgent(header) + .browser(userAgent.getBrowser().toString()) + .os(userAgent.getOperatingSystem().toString()).build(); + + log.info("Request Log Info : {}", JSONUtil.toJsonStr(logData)); + + return result; + } + + /** + * 获取方法参数名和参数值 + */ + private Map getNameAndValue(ProceedingJoinPoint joinPoint) { + final Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + final String[] names = methodSignature.getParameterNames(); + final Object[] args = joinPoint.getArgs(); + + if (ArrayUtil.isEmpty(names) || ArrayUtil.isEmpty(args)) { + return Collections.emptyMap(); + } + if (names.length != args.length) { + log.warn("{}方法参数名和参数值数量不一致", methodSignature.getName()); + return Collections.emptyMap(); + } + Map map = Maps.newHashMap(); + for (int i = 0; i < names.length; i++) { + map.put(names[i], args[i]); + } + return map; + } + + private static final String UNKNOWN = "unknown"; + + /** + * 获取ip地址 + */ + public static String getIp(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(); + } + String comma = ","; + String localhost = "127.0.0.1"; + if (ip.contains(comma)) { + ip = ip.split(",")[0]; + } + if (localhost.equals(ip)) { + // 获取本机真正的ip地址 + try { + ip = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + log.error(e.getMessage(), e); + } + } + return ip; + } + +} +``` + +### 2.测试 + +#### 2.1.添加测试接口 +```java +@Slf4j +@RestController +public class TestController { + + /** + * 测试方法 + * + * @param who 测试参数 + * @return {@link Dict} + */ + @GetMapping("/test") + public Dict test(String who) { + return Dict.create().set("who", StrUtil.isBlank(who) ? "me" : who); + } + + /** + * 测试post json方法 + * + * @param map 请求的json参数 + * @return {@link Dict} + */ + @PostMapping("/testJson") + public Dict testJson(@RequestBody Map map) { + + final String jsonStr = JSONUtil.toJsonStr(map); + log.info(jsonStr); + return Dict.create().set("json", map); + } +} +``` + +启动 `LogAopApplication`,使用 postman 分别测试 +- GET请求 + +method: GET + +url: `http://127.0.0.1:8080/test?who=xkcoding` + +- POST请求 + +method: POST + +url: `http://127.0.0.1:8080/testJson` + +header: `ContentType:application/json` + +data: `{"id":"xxxx","content":"test"}` diff --git a/demo-log/demo-log-aop/pom.xml b/demo-log/demo-log-aop/pom.xml new file mode 100644 index 0000000..8919827 --- /dev/null +++ b/demo-log/demo-log-aop/pom.xml @@ -0,0 +1,69 @@ + + + + com.xkcoding + demo-log + 1.0.0-SNAPSHOT + + + 4.0.0 + + demo-log-aop + 1.0.0-SNAPSHOT + jar + + demo-log-aop + Demo project for Spring Boot + + + 17 + + + + + com.xkcoding + common-tools + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-aop + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.projectlombok + lombok + true + + + + + eu.bitwalker + UserAgentUtils + 1.21 + + + + + demo-log-aop + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/demo-log-aop/src/main/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplication.java b/demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/LogAopApplication.java similarity index 61% rename from demo-log-aop/src/main/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplication.java rename to demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/LogAopApplication.java index 32d225c..dbd5671 100644 --- a/demo-log-aop/src/main/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplication.java +++ b/demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/LogAopApplication.java @@ -5,16 +5,16 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; /** *

- * 启动类 + * 启动器 *

* * @author yangkai.shen - * @date Created in 2018-10-01 22:05 + * @date Created in 2022-08-26 11:58 */ @SpringBootApplication -public class SpringBootDemoLogAopApplication { +public class LogAopApplication { public static void main(String[] args) { - SpringApplication.run(SpringBootDemoLogAopApplication.class, args); + SpringApplication.run(LogAopApplication.class, args); } } diff --git a/demo-log-aop/src/main/java/com/xkcoding/log/aop/aspectj/AopLog.java b/demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/aspectj/AopLog.java similarity index 79% rename from demo-log-aop/src/main/java/com/xkcoding/log/aop/aspectj/AopLog.java rename to demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/aspectj/AopLog.java index d39c093..d9a8e64 100644 --- a/demo-log-aop/src/main/java/com/xkcoding/log/aop/aspectj/AopLog.java +++ b/demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/aspectj/AopLog.java @@ -3,11 +3,9 @@ package com.xkcoding.log.aop.aspectj; import cn.hutool.core.util.ArrayUtil; import cn.hutool.json.JSONUtil; import com.google.common.collect.Maps; +import com.xkcoding.log.aop.model.LogData; import eu.bitwalker.useragentutils.UserAgent; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; @@ -19,7 +17,6 @@ import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Collections; @@ -33,11 +30,11 @@ import java.util.Objects; * * @author yangkai.shen * @author chen qi - * @date Created in 2018-10-01 22:05 + * @date Created in 2022-08-26 11:58 */ +@Slf4j @Aspect @Component -@Slf4j public class AopLog { /** * 切入点 @@ -56,7 +53,6 @@ public class AopLog { */ @Around("log()") public Object aroundLog(ProceedingJoinPoint point) throws Throwable { - // 开始打印请求日志 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = Objects.requireNonNull(attributes).getRequest(); @@ -67,7 +63,7 @@ public class AopLog { String header = request.getHeader("User-Agent"); UserAgent userAgent = UserAgent.parseUserAgentString(header); - final Log l = Log.builder() + LogData logData = LogData.builder() .threadId(Long.toString(Thread.currentThread().getId())) .threadName(Thread.currentThread().getName()) .ip(getIp(request)) @@ -82,18 +78,15 @@ public class AopLog { .browser(userAgent.getBrowser().toString()) .os(userAgent.getOperatingSystem().toString()).build(); - log.info("Request Log Info : {}", JSONUtil.toJsonStr(l)); + log.info("Request Log Info : {}", JSONUtil.toJsonStr(logData)); return result; } /** - * 获取方法参数名和参数值 - * @param joinPoint - * @return + * 获取方法参数名和参数值 */ private Map getNameAndValue(ProceedingJoinPoint joinPoint) { - final Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; final String[] names = methodSignature.getParameterNames(); @@ -145,34 +138,4 @@ public class AopLog { return ip; } - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - static class Log { - // 线程id - private String threadId; - // 线程名称 - private String threadName; - // ip - private String ip; - // url - private String url; - // http方法 GET POST PUT DELETE PATCH - private String httpMethod; - // 类方法 - private String classMethod; - // 请求参数 - private Object requestParams; - // 返回参数 - private Object result; - // 接口耗时 - private Long timeCost; - // 操作系统 - private String os; - // 浏览器 - private String browser; - // user-agent - private String userAgent; - } } diff --git a/demo-log-aop/src/main/java/com/xkcoding/log/aop/controller/TestController.java b/demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/controller/TestController.java similarity index 91% rename from demo-log-aop/src/main/java/com/xkcoding/log/aop/controller/TestController.java rename to demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/controller/TestController.java index c261d79..50239e2 100644 --- a/demo-log-aop/src/main/java/com/xkcoding/log/aop/controller/TestController.java +++ b/demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/controller/TestController.java @@ -13,12 +13,11 @@ import java.util.Map; /** *

- * 测试 Controller + * 测试端点 *

* * @author yangkai.shen - * @author chen qi - * @date Created in 2018-10-01 22:10 + * @date Created in 2022-08-26 11:58 */ @Slf4j @RestController @@ -36,7 +35,8 @@ public class TestController { } /** - * 测试post json方法 + * 测试post json方法 + * * @param map 请求的json参数 * @return {@link Dict} */ diff --git a/demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/model/LogData.java b/demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/model/LogData.java new file mode 100644 index 0000000..c929bce --- /dev/null +++ b/demo-log/demo-log-aop/src/main/java/com/xkcoding/log/aop/model/LogData.java @@ -0,0 +1,63 @@ +package com.xkcoding.log.aop.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LogData { + /** + * 线程id + */ + private String threadId; + /** + * 线程名称 + */ + private String threadName; + /** + * ip + */ + private String ip; + /** + * url + */ + private String url; + /** + * 类方法 + */ + private String classMethod; + /** + * http方法 GET + * POST PUT + * DELETE PATCH + */ + private String httpMethod; + /** + * 请求参数 + */ + private Object requestParams; + /** + * 返回参数 + */ + private Object result; + /** + * 接口耗时 + */ + private Long timeCost; + /** + * 操作系统 + */ + private String os; + /** + * 浏览器 + */ + private String browser; + /** + * user-agent + */ + private String userAgent; +} diff --git a/demo-log-aop/src/main/resources/application.yml b/demo-log/demo-log-aop/src/main/resources/application.yml similarity index 100% rename from demo-log-aop/src/main/resources/application.yml rename to demo-log/demo-log-aop/src/main/resources/application.yml diff --git a/demo-log/demo-log-aop/src/main/resources/logback-spring.xml b/demo-log/demo-log-aop/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..77715cf --- /dev/null +++ b/demo-log/demo-log-aop/src/main/resources/logback-spring.xml @@ -0,0 +1,77 @@ + + + + + + INFO + + + %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n + UTF-8 + + + + + + + + ERROR + + DENY + + ACCEPT + + + + + + + logs/demo-log/demo-log-aop/info.created_on_%d{yyyy-MM-dd}.part_%i.log + + 90 + + + + + 2MB + + + + + + + %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n + UTF-8 + + + + + + + Error + + + + + + + logs/demo-log/demo-log-aop/error.created_on_%d{yyyy-MM-dd}.part_%i.log + + 90 + + + 2MB + + + + %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n + UTF-8 + + + + + + + + + diff --git a/demo-log/demo-log-aop/src/test/java/com/xkcoding/log/aop/LogAopApplicationTests.java b/demo-log/demo-log-aop/src/test/java/com/xkcoding/log/aop/LogAopApplicationTests.java new file mode 100644 index 0000000..9e5c6d6 --- /dev/null +++ b/demo-log/demo-log-aop/src/test/java/com/xkcoding/log/aop/LogAopApplicationTests.java @@ -0,0 +1,13 @@ +package com.xkcoding.log.aop; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class LogAopApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/demo-log/pom.xml b/demo-log/pom.xml index b42f2c8..449be52 100644 --- a/demo-log/pom.xml +++ b/demo-log/pom.xml @@ -20,6 +20,7 @@ demo-log-logback + demo-log-aop diff --git a/pom.xml b/pom.xml index 624a26f..4c118f0 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,6 @@ demo-workflow demo-package demo-others -