栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springBoot集成AOP做请求日志记录

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springBoot集成AOP做请求日志记录

项目结构

切面日志记录信息

@Aspect
@Component
@Slf4j
public class AopLog {
   private static final String START_TIME = "request-start";
    private static final Logger log = LoggerFactory.getLogger(AopLog.class);

   
   @Pointcut("execution(public * com.xkcoding.log.aop.controller.*Controller.*(..))")
   public void log() {

   }

   
   @Before("log()")
   public void beforeLog(JoinPoint point) {
      ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

      HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();

      log.info("【请求 URL】:{}", request.getRequestURL());
      log.info("【请求 IP】:{}", request.getRemoteAddr());
      log.info("【请求类名】:{},【请求方法名】:{}", point.getSignature().getDeclaringTypeName(), point.getSignature().getName());

      Map parameterMap = request.getParameterMap();
      log.info("【请求参数】:{},", JSONUtil.toJsonStr(parameterMap));
      Long start = System.currentTimeMillis();
      request.setAttribute(START_TIME, start);
   }

   
   @Around("log()")
   public Object aroundLog(ProceedingJoinPoint point) throws Throwable {
      Object result = point.proceed();
      log.info("【返回值】:{}", JSONUtil.toJsonStr(result));
      return result;
   }

   
   @AfterReturning("log()")
   public void afterReturning() {
      ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
      HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();

      Long start = (Long) request.getAttribute(START_TIME);
      Long end = System.currentTimeMillis();
      log.info("【请求耗时】:{}毫秒", end - start);

      String header = request.getHeader("User-Agent");
      UserAgent userAgent = UserAgent.parseUserAgentString(header);
      log.info("【浏览器类型】:{},【操作系统】:{},【原始User-Agent】:{}", userAgent.getBrowser().toString(), userAgent.getOperatingSystem().toString(), header);
   }
}

测试类

@RestController
public class TestController {

   
   @GetMapping("/test")
   public Dict test(String who) {
      return Dict.create().set("who", StrUtil.isBlank(who) ? "me" : who);
   }

}

xml文件配置



 
 
  
   INFO
  
  
   %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n
   UTF-8
  
 

 
  
  
   
   ERROR
   
   DENY
   
   ACCEPT
  
  
  
  
  
   
   logs/spring-boot-demo-log-aop/info.created_on_%d{yyyy-MM-dd}.part_%i.log
   
   90
   
   
   
    
    2MB
   
  
  
  
  
  
   %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n
   UTF-8 
  
 

 
  
  
   Error
  
  
  
  
  
   
   logs/spring-boot-demo-log-aop/error.created_on_%d{yyyy-MM-dd}.part_%i.log
   
   90
   
    
    2MB
   
  
  
   %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n
   UTF-8 
  
 

 
  
  
  
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354391.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号