@Aspect
@Component
@Slf4j
public class LogAspect {
private final String POINT_CUT = "execution(* com.package.name.controller.app..*(..))";
@Pointcut(POINT_CUT)
private void controllerLog() {
}
ThreadLocal<Long> startTime = new ThreadLocal<>();
@Before("controllerLog()")
public void doBefore(JoinPoint joinPoint) {
try {
startTime.set(System.currentTimeMillis());
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
log.info("请求的URL: " + request.getRequestURL().toString()
+ ", 请求设备: " + request.getHeader("user-agent")
+ ", 请求方式: " + request.getMethod()
+ ", 请求IP: " + request.getRemoteAddr()
+ ", 请求方法: " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()
+ ", 请求header: " + JSON.toJSONString(headers(request))
+ ", 请求参数: " + Arrays.toString(joinPoint.getArgs())
);
} catch (Exception e) {
log.warn("LogAspect doBefore fail, e: {}", e.toString());
}
}
@AfterReturning(returning = "result", pointcut = "controllerLog()")
public void doAfterReturning(Object result) {
try {
log.info("返回参数: " + JSON.toJSONString(result)
+ ", 消耗时间: " + (System.currentTimeMillis() - startTime.get() + " ms"));
} catch (Exception e) {
log.warn("LogAspect doAfterReturning fail, e: {}", e.toString());
} finally {
startTime.remove();
}
}
private Map<String, Object> headers(HttpServletRequest request){
HashMap<String, Object> map = new HashMap<>();
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
if (!StringUtils.equalsIgnoreCase("cookie", name)){
map.put(name, request.getHeader(name));
}
}
return map;
}
}
日志切面controller
最新推荐文章于 2023-08-14 18:30:00 发布