切面日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.xxxxxx.tools.client.config;

import org.apache.logging.log4j.Logger;

import java.util.Arrays;
import java.util.Date;
import java.util.Enumeration;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.logging.log4j.LogManager;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.xxxxxx.tools.client.dao.PublicLogRepository;
import com.xxxxxx.tools.client.pojo.model.PublicLog;
import com.xxxxxx.tools.client.util.CommonUtil;

@Aspect
@Component
public class WebLogAspect {

private Logger logger = LogManager.getLogger(this.getClass());
@Autowired
private PublicLogRepository publicLogRepository;
@Autowired
private HttpServletRequest request;

// befor after同步执行时变量
ThreadLocal<Long> startTime = new ThreadLocal<>();

@Pointcut("execution(public * com.xxxxxx.tools.client.web..*.*Controller.*(..))")
public void webLog(){}

@Before("webLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {

startTime.set(System.currentTimeMillis());


// 记录下请求内容
logger.info("URL : " + request.getRequestURL().toString());
logger.info("HTTP_METHOD : " + request.getMethod());
logger.info("IP : " + request.getRemoteAddr()+"========"+request.getRemoteUser()+"========"+request.getRequestedSessionId());
logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));
logger.info("START TIME : " + startTime.get());

}
/**
* 正常返回
* @param point
* @param ret
*/
@AfterReturning(returning = "ret", pointcut = "webLog()")
public void doAfterReturning(JoinPoint point,Object ret) {


// 处理完请求,返回内容
logger.info("RESPONSE : " + ret);
logger.info("SPEND TIME : " + (System.currentTimeMillis() - startTime.get()));
//记录到public_log表中
PublicLog log = new PublicLog(request.getRequestURL().toString(), CommonUtil.getRemoteHost(request), new Date(startTime.get()), new Date(), System.currentTimeMillis() - startTime.get()+"",(String)request.getSession().getAttribute("sAMAccountName"));
publicLogRepository.save(log);
}
/**
* 抛异常
* @param point
* @param ex
*/
@AfterThrowing(pointcut="webLog()",throwing = "ex")
public void afterThrowing(JoinPoint point,Exception ex) {
try{
String message = ex.getMessage();
if(message.length()>800){
message=message.substring(0,800);
}
PublicLog log = new PublicLog(request.getRequestURL().toString(),CommonUtil.getRemoteHost(request), new Date(startTime.get()), new Date(), System.currentTimeMillis() - startTime.get()+"",message,(String)request.getSession().getAttribute("sAMAccountName"));
publicLogRepository.save(log);
}catch (Exception e) {
e.printStackTrace();
}
}

}