-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
215 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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`这个变量了。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 22 additions & 0 deletions
22
src/main/java/com/fengwenyi/javalib/aop/DefaultWebLogAspect.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
104
src/main/java/com/fengwenyi/javalib/aop/LBaseWebLogAspect.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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("∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨"); | ||
|
||
} | ||
} |