java使用AOP切面获取请求日志并记录

这篇博客详细介绍了如何使用Java的AOP(面向切面编程)来拦截控制器的响应,记录请求日志,包括请求参数、响应时间、响应内容、IP地址、地理位置等信息。通过LogAspect类和相关工具类,如LogFeignService、IPUtil、HttpHelper,实现了日志的获取和存储。还提供了一个TestController接口作为示例,并展示了IPUtil类中获取IP地址和城市信息的方法。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.context.request.RequestAttributes;

import org.springframework.web.context.request.RequestContextHolder;

import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

import java.io.IOException;

import java.util.Date;

import java.util.Objects;

/**

  • @description 拦截所有控制器的返回,记录响应报文

  • @author unhejing

  • @date 2021-03-17 上午11:52:26

*/

@Aspect

@Configuration

@Slf4j

public class LogAspect {

@Autowired

private LogFeignService logFeignService;

public LogAspect() {

}

@Pointcut(“execution(public * com.tjair.tjapi.controller..(…))”)

public void pointCutMethod() {

}

// 声明环绕通知

@Around(“pointCutMethod()”)

public Object doAround(ProceedingJoinPoint pjp) throws Throwable {

Long startTime = System.currentTimeMillis();

ApiOperation apiOperation = ((MethodSignature)pjp.getSignature()).getMethod().getAnnotation(ApiOperation.class);

// 获取request对象

RequestAttributes ra = RequestContextHolder.getRequestAttributes();

ServletRequestAttributes sra = (ServletRequestAttributes) ra;

HttpServletRequest request = sra.getRequest();

Object ret = pjp.proceed();

Long endTime = System.currentTimeMillis();

TjapiLogVo tjapiLogVo = getTjapiLogVo(request,Objects.nonNull(apiOperation) ? apiOperation.value() : “”,endTime-startTime,JSON.toJSONString(ret));

// 添加日志

addLog(tjapiLogVo);

log.info(“响应数据耗时{}:响应数据{}”,endTime-startTime,JSON.toJSONString(ret));

return ret;

}

public void addLog(TjapiLogVo tjapiLogVo) {

log.info(“添加日志:{}”,JSON.toJSONString(tjapiLogVo));

Long startTime = System.currentTimeMillis();

logFeignService.addTjapiLog(tjapiLogVo);

Long endtime = System.currentTimeMillis();

log.info(“添加日志耗时:{}”,endtime-startTime);

}

private TjapiLogVo getTjapiLogVo(HttpServletRequest request,String apiName,Long time,String respons

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值