Skip to content

Commit

Permalink
aop
Browse files Browse the repository at this point in the history
  • Loading branch information
fengwenyi committed Aug 30, 2018
1 parent 67ac50c commit 4836ed8
Show file tree
Hide file tree
Showing 5 changed files with 215 additions and 11 deletions.
12 changes: 7 additions & 5 deletions JavaLib.iml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.2" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpclient:4.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpcore:4.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-codec:commons-codec:1.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.aspectj:aspectjrt:1.9.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
</component>
</module>
38 changes: 38 additions & 0 deletions doc/log.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# 关于日志

### 日志变量定义的问题:

在Android中,日志用Log

在Log4j中,很多人用logger,我估计是怕变量重复

@Slf4j(lombok)中,用log

看了一下,我决定还是用 `log`

### 日志初始化的问题

目前日志初始化的方式有这样三种(我这里选用slf4j框架)
```java
// 第一种,使用lombok插件
@Slf4j

// 第二种
protected final Logger log
= LoggerFactory.getLogger(this.getClass());

// 第三种
protected static final Logger log
= LoggerFactory.getLogger(LBaseWebLogAspect.class);
```

为什么要讨论呢?

有这样两个方面的原因:

一是,如果使用静态变量,那么在任何方法中,都可以使用(该类中的静态方法或是非静态方法),另外,静态变量也是相当比较安全的。

二是,第1,3种,日志打印的名字是 `LBaseWebLogAspect`,也就是定义变量的类名,这不利于我们查找日志。


最后,你是否有注意到我前面的 `protected`,是的,你继承该类后,如果你需要记录日志,那么,你就可以直接使用 `log`这个变量了。
50 changes: 44 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
<developers>
<developer>
<name>Wenyi Feng</name>
<email>xfsy_2015@163.com</email>
<email>xfsy2014@gmail.com</email>
<url>http://fengwenyi.com</url>
</developer>
</developers>
Expand All @@ -40,6 +40,8 @@
<gson.version>2.8.5</gson.version>
<http_client.version>4.2</http_client.version>
<lombok.version>1.18.2</lombok.version>
<aspectj.version>1.9.1</aspectj.version>
<slf4j.version>1.7.25</slf4j.version>
</properties>


Expand All @@ -57,44 +59,80 @@
</build>

<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<!--
https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api
web request
-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet_api.version}</version>
<scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<!--
https://mvnrepository.com/artifact/com.google.code.gson/gson
json
-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
<scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<!--
https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient
http / https
-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${http_client.version}</version>
<scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/junit/junit -->
<!--
https://mvnrepository.com/artifact/junit/junit
service test / controllertest / method test / interface test / or other test
-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<!--
https://mvnrepository.com/artifact/org.projectlombok/lombok
lombok
getter / setter
-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>

<!--
https://mvnrepository.com/artifact/org.aspectj/aspectjrt
aop
-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
<scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>

</dependencies>

</project>
22 changes: 22 additions & 0 deletions src/main/java/com/fengwenyi/javalib/aop/DefaultWebLogAspect.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.fengwenyi.javalib.aop;

import org.aspectj.lang.JoinPoint;

/**
* 实现示例
*
* @author Wenyi Feng
* @since 2018-08-30
*/
public class DefaultWebLogAspect extends LBaseWebLogAspect {

@Override
public void doBefor(JoinPoint joinPoint) throws Exception {
//super.doBefor(joinPoint, request);
}

@Override
public void doAfterReturn(Object ret) throws Exception {
//super.doAfterReturn(ret, request);
}
}
104 changes: 104 additions & 0 deletions src/main/java/com/fengwenyi/javalib/aop/LBaseWebLogAspect.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package com.fengwenyi.javalib.aop;

import com.fengwenyi.javalib.util.RequestUtil;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.Set;

/**
* web请求aop切面
*
* 通过日志记录web请求以及方法请求处理的一些细节
*
* @author Wenyi Feng
* @since 2018-08-30
*/
//@Slf4j
public abstract class LBaseWebLogAspect {

/**
* 继承类可以直接使用
*
*/
//protected final Logger log = LoggerFactory.getLogger(this.getClass());
protected static final Logger log = LoggerFactory.getLogger(LBaseWebLogAspect.class);

// 记录方法处理消耗的时间(纳秒)
private long startTime = 0L, endTime = 0L, time = 0L;

// 需要去实现(进入方法前)
public abstract void doBefor(JoinPoint joinPoint) throws Exception;

// 需要实现(返回后)
public abstract void doAfterReturn(Object ret) throws Exception;

/**
*
* @param joinPoint
* @param request 为了完全不侵入你的代码,所以我能帮你拿到request,但是,你很容易,所以,我选择交给你获取
* @throws Exception
*/
public void doBefore(JoinPoint joinPoint, HttpServletRequest request) throws Exception {

startTime = System.nanoTime();

// header
//String headerStr = request.getHeader(str);

// 请求ip
//String ip = request.getRemoteAddr();
String ip = RequestUtil.getRequestIp(request);

// 请求地址(url)
String url = request.getRequestURL().toString();

// 请求的方式(get/post/...)
String mode = request.getMethod();

// 请求参数
Map<String, String[]> paramMap = request.getParameterMap();

// 请求类
String className = joinPoint.getSignature().getDeclaringTypeName();

// 请求方法(及参数类型)
String methodName = joinPoint.getSignature().getName();

//------------------------------------------------------------

log.info("∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧");

log.info("request ip:{}", ip);
log.info("request url:{}", url);
log.info("request mode:{}", mode);
log.info("request classPath:{}", className + "#" + methodName);
log.info("request paramData:{}", new Gson().toJson(paramMap));

//------------------------------------------------------------
}

/**
*
* @param ret
* @param request
* @throws Exception
*/
public void doAfterReturning(Object ret, HttpServletRequest request) throws Exception {

//

log.info("return data:{}", ret);
endTime = System.nanoTime();
time = endTime - startTime;
log.info("time spead:{} (ns)", time);

log.info("∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨");

}
}

0 comments on commit 4836ed8

Please sign in to comment.