From 8ac97ac2f425351ba26dd6913d0b0811a5f842f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E7=8C=BFDD?= Date: Thu, 19 May 2016 14:51:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8AOP=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E5=A4=84=E7=90=86Web=E8=AF=B7=E6=B1=82=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chapter4-2-4/pom.xml | 72 +++++++++++++++++++ .../main/java/com/didispace/Application.java | 13 ++++ .../com/didispace/aspect/WebLogAspect.java | 63 ++++++++++++++++ .../com/didispace/web/HelloController.java | 20 ++++++ .../src/main/resources/application.properties | 0 .../src/main/resources/log4j.properties | 36 ++++++++++ .../java/com/didispace/ApplicationTests.java | 23 ++++++ 7 files changed, 227 insertions(+) create mode 100644 Chapter4-2-4/pom.xml create mode 100644 Chapter4-2-4/src/main/java/com/didispace/Application.java create mode 100644 Chapter4-2-4/src/main/java/com/didispace/aspect/WebLogAspect.java create mode 100644 Chapter4-2-4/src/main/java/com/didispace/web/HelloController.java create mode 100644 Chapter4-2-4/src/main/resources/application.properties create mode 100755 Chapter4-2-4/src/main/resources/log4j.properties create mode 100644 Chapter4-2-4/src/test/java/com/didispace/ApplicationTests.java diff --git a/Chapter4-2-4/pom.xml b/Chapter4-2-4/pom.xml new file mode 100644 index 0000000..c84fa80 --- /dev/null +++ b/Chapter4-2-4/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + com.didispace + Chapter4-2-4 + 1.0.0 + jar + + Chapter4-2-4 + Spring Boot project + + + org.springframework.boot + spring-boot-starter-parent + 1.3.2.RELEASE + + + + + UTF-8 + 1.8 + + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-logging + + + + + + org.springframework.boot + spring-boot-starter-log4j + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-aop + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/Chapter4-2-4/src/main/java/com/didispace/Application.java b/Chapter4-2-4/src/main/java/com/didispace/Application.java new file mode 100644 index 0000000..2a14b75 --- /dev/null +++ b/Chapter4-2-4/src/main/java/com/didispace/Application.java @@ -0,0 +1,13 @@ +package com.didispace; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/Chapter4-2-4/src/main/java/com/didispace/aspect/WebLogAspect.java b/Chapter4-2-4/src/main/java/com/didispace/aspect/WebLogAspect.java new file mode 100644 index 0000000..b4c3666 --- /dev/null +++ b/Chapter4-2-4/src/main/java/com/didispace/aspect/WebLogAspect.java @@ -0,0 +1,63 @@ +package com.didispace.aspect; + +import org.apache.log4j.Logger; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.annotation.Order; +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.util.Arrays; + +/** + * Web层日志切面 + * + * @author 程序猿DD + * @version 1.0.0 + * @date 16/5/17 上午10:42. + * @blog http://blog.didispace.com + */ +@Aspect +@Order(5) +@Component +public class WebLogAspect { + + private Logger logger = Logger.getLogger(getClass()); + + ThreadLocal startTime = new ThreadLocal<>(); + + @Pointcut("execution(public * com.didispace.web..*.*(..))") + public void webLog(){} + + @Before("webLog()") + public void doBefore(JoinPoint joinPoint) throws Throwable { + startTime.set(System.currentTimeMillis()); + + // 接收到请求,记录请求内容 + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = attributes.getRequest(); + + // 记录下请求内容 + logger.info("URL : " + request.getRequestURL().toString()); + logger.info("HTTP_METHOD : " + request.getMethod()); + logger.info("IP : " + request.getRemoteAddr()); + logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); + logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs())); + + } + + @AfterReturning(returning = "ret", pointcut = "webLog()") + public void doAfterReturning(Object ret) throws Throwable { + // 处理完请求,返回内容 + logger.info("RESPONSE : " + ret); + logger.info("SPEND TIME : " + (System.currentTimeMillis() - startTime.get())); + } + + +} + diff --git a/Chapter4-2-4/src/main/java/com/didispace/web/HelloController.java b/Chapter4-2-4/src/main/java/com/didispace/web/HelloController.java new file mode 100644 index 0000000..e53c5db --- /dev/null +++ b/Chapter4-2-4/src/main/java/com/didispace/web/HelloController.java @@ -0,0 +1,20 @@ +package com.didispace.web; + +import org.springframework.web.bind.annotation.*; + +/** + * @author 程序猿DD + * @version 1.0.0 + * @date 16/5/19 下午1:27. + * @blog http://blog.didispace.com + */ +@RestController +public class HelloController { + + @RequestMapping(value = "/hello", method = RequestMethod.GET) + @ResponseBody + public String hello(@RequestParam String name) { + return "Hello " + name; + } + +} diff --git a/Chapter4-2-4/src/main/resources/application.properties b/Chapter4-2-4/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/Chapter4-2-4/src/main/resources/log4j.properties b/Chapter4-2-4/src/main/resources/log4j.properties new file mode 100755 index 0000000..38aca2b --- /dev/null +++ b/Chapter4-2-4/src/main/resources/log4j.properties @@ -0,0 +1,36 @@ +# LOG4J配置 +log4j.rootCategory=INFO, stdout, file, errorfile +log4j.category.com.didispace=DEBUG, didifile +log4j.logger.error=errorfile + +# 控制台输出 +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n + +# root日志输出 +log4j.appender.file=org.apache.log4j.DailyRollingFileAppender +log4j.appender.file.file=logs/all.log +log4j.appender.file.DatePattern='.'yyyy-MM-dd +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n + +# error日志输出 +log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender +log4j.appender.errorfile.file=logs/error.log +log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd +log4j.appender.errorfile.Threshold = ERROR +log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout +log4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n + +# com.didispace下的日志输出 +log4j.appender.didifile=org.apache.log4j.DailyRollingFileAppender +log4j.appender.didifile.file=logs/my.log +log4j.appender.didifile.DatePattern='.'yyyy-MM-dd +log4j.appender.didifile.layout=org.apache.log4j.PatternLayout +log4j.appender.didifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n + + + + + diff --git a/Chapter4-2-4/src/test/java/com/didispace/ApplicationTests.java b/Chapter4-2-4/src/test/java/com/didispace/ApplicationTests.java new file mode 100644 index 0000000..5fafc6d --- /dev/null +++ b/Chapter4-2-4/src/test/java/com/didispace/ApplicationTests.java @@ -0,0 +1,23 @@ +package com.didispace; + +import org.apache.log4j.Logger; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = Application.class) +public class ApplicationTests { + + private Logger logger = Logger.getLogger(getClass()); + + @Test + public void test() throws Exception { + logger.info("输出info"); + logger.debug("输出debug"); + logger.error("输出error"); + } + +}