一、POM增加AOP JAR包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
二、Logweb类
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Logweb
{
String value() default "";
}
三、SysAspect类
package cn.com.hfai.controller.system;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Aspect
@Component
public class SysAspect
{
private static final Logger logger = LoggerFactory.getLogger(SysAspect.class);
ThreadLocal<Long> startTime = new ThreadLocal<>();
@Pointcut("@annotation(cn.com.hfai.controller.system.Logweb)")
public void LogPointcut(){}
@Before("LogPointcut()")
public void doBefore(JoinPoint joinPoint) throws Throwable
{
startTime.set(System.currentTimeMillis());
logger.info("====>>>>SysAspect doBefore");
ServletRequestAttributes attribute = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attribute.getRequest();
logger.info("====>>>>request startTime::" + new Date());
logger.info("====>>>>request URL::" + request.getRequestURL().toString());
logger.info("====>>>>request method::" + request.getMethod());
logger.info("====>>>>request IP::" + request.getRemoteAddr());
logger.info("====>>>>request class method={}",joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
logger.info("====>>>>request method paramter={}", joinPoint.getArgs());
}
@AfterReturning(returning = "ret", pointcut = "LogPointcut()")
public void doAfterReturning(Object ret) throws Throwable
{
logger.info("====>>>>SysAspect doAfterReturning response::" + ret);
logger.info("====>>>>response endTime::" + new Date());
logger.info("====>>>>spend time::" + (System.currentTimeMillis()-startTime.get()));
}
}
注:@annotation(cn.com.hfai.controller.system.Logweb) 一定要指定Logweb类
四、在Controller类的方法之上加上注解 @Logweb 即可
最后测试结果:
2018-12-10 19:34:59.929 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>SysAspect doBefore
2018-12-10 19:34:59.929 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>request startTime::Mon Dec 10 19:34:59 CST 2018
2018-12-10 19:34:59.930 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>request URL::http://localhost:8080/auth/userLogin
2018-12-10 19:34:59.930 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>request method::POST
2018-12-10 19:34:59.930 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>request IP::0:0:0:0:0:0:0:1
2018-12-10 19:34:59.931 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>request class method=cn.com.hfai.controller.user.UserController.userLogin
2018-12-10 19:34:59.931 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>request method paramter=org.apache.catalina.connector.RequestFacade@91d8135
2018-12-10 19:34:59.931 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>SysAspect doAfterReturning response::ModelAndView: reference to view with name 'home'; model is null
2018-12-10 19:34:59.931 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>response endTime::Mon Dec 10 19:34:59 CST 2018
2018-12-10 19:34:59.931 INFO 11640 --- [nio-8080-exec-5] cn.com.hfai.controller.system.SysAspect : ====>>>>spend time::2
注:这个只是打印在控制台上,若想放到数据库中,则需要增加操作数据库的业务代码
分享到:
相关推荐
在本项目中,"SpringBoot+AOP日志"是一个基于Spring Boot框架的日志管理系统,它利用了Spring Boot的便利性和AOP(面向切面编程)技术来实现对应用程序日志的高效、统一处理。让我们深入探讨一下这个项目的核心知识...
SpringBoot AOP,即面向切面编程,是Spring框架中的一个重要特性,用于实现代码的横切关注点,如日志记录、事务管理、权限验证等。AOP通过使用代理模式,将这些关注点与核心业务逻辑分离,使得代码更加模块化,更...
内容概要:springboot+拦截器+aop+自定义注解+本地线程实现统一接口日志记录,记录下接口所在模块、接口描述、接口请求参数、接口返回参数、接口请求时间以及接口耗时用于接口优化,接口记录参数以及操作人防止使用...
AOP(面向切面编程)是一种强大的工具,它允许我们在不改变原有业务逻辑的情况下,对代码进行横向扩展,比如添加日志记录功能。本篇文章将深入探讨如何在Spring Boot中利用AOP注解来实现操作日志的记录。 首先,...
在Spring Boot应用中,AOP(面向切面编程)是一种强大的工具,用于实现代码的解耦和模块化,尤其适用于处理横切关注点,如日志记录、事务管理、安全控制等。本教程将深入探讨如何利用Spring Boot的AOP特性来实现日志...
4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...
另一方面,Spring AOP(面向切面编程)则是Spring框架的一个核心特性,用于实现跨切面的关注点,如日志记录。本篇文章将深入探讨如何将Swagger与Spring AOP结合起来,以实现优雅的日志记录功能。 首先,让我们了解...
而AOP(Aspect Oriented Programming,面向切面编程)则是Spring框架的一个重要特性,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强或日志记录等操作。现在我们来详细探讨Spring Boot集成AOP的基本...
SpringBoot+AOP+TraceID.pdf 本文档主要讲解了 SpringBoot 中 AOP(Aspect Oriented Programming)的应用和 TraceID 的实现...AOP 可以使得代码更加灵活和可维护,而 TraceID 可以帮助我们更好地跟踪和分析日志记录。
在Spring Boot应用中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们创建横切关注点,如日志记录、权限检查等,这些关注点可以被编织到应用程序的多个点上,而无需侵入核心业务逻辑。在本案例中,我们将...
SpringBoot+AOP日志服务是将流行的Java...综上所述,SpringBoot+AOP日志服务利用Spring Boot的便捷性和AOP的强大功能,实现了一套完整的日志记录和查询系统,既方便了开发者调试,也为运营人员提供了有力的监控工具。
在Spring中,AOP主要用于日志记录、性能监控、事务管理等方面。我们可以定义一个切面,包含一系列关注点,当这些关注点与业务代码(即切点)匹配时,切面的逻辑将被插入到切点中执行。 在本例中,"springboot 脱敏...
在Spring框架中,AOP主要用于日志记录、事务管理、性能统计等场景。本示例是关于如何在Spring Boot项目中实现AOP功能的一个简单演示。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越...
- **日志记录**:通过 AOP,可以在方法执行前后自动记录日志,避免在每个需要日志的地方重复写代码。 - **性能监控**:利用 AOP 记录方法执行时间,分析系统性能瓶颈。 - **权限控制**:在安全方面,AOP 可以...
AOP则是Spring框架的核心特性,用于在不修改原有代码的情况下,对特定行为(如日志记录、权限检查等)进行横切关注。 在Spring Boot项目中,我们可以通过AOP来实现读写分离。首先,我们需要定义两个数据源,一个...
例如,可以创建一个`@Loggable`注解,然后在Aspect中定义切点`@Around("@annotation(loggable)")`,这样所有带有`@Loggable`的方法都会被拦截并进行日志记录。 6. **AspectJ**:AspectJ是一个全面的AOP语言,比...
通过示例代码,详细介绍了如何使用AOP来记录操作日志,包括请求开始、执行成功和异常等情况下的日志记录。该代码实例能够帮助读者更好地理解AOP的应用场景和实现方法。 知识点1: AOP的概念和应用场景 AOP是面向...
使用 SpringBoot+AOP ...本文详细介绍了使用 SpringBoot+AOP 实现可插拔式日志的示例代码,包括创建 SysLog 注解、SysLogAspect 类,以及记录日志的逻辑。该示例代码对于大家的学习或者工作具有一定的参考学习价值。
SpringBoot中的AOP(Aspect-Oriented Programming)切面是指在业务逻辑中添加的额外功能,以实现日志记录、安全检查、事务管理等功能。但是,在实际开发中,我们可能会遇到AOP切面不起作用的问题。下面我们将介绍...
横切关注点是指那些跨越多个模块的功能,如日志记录、安全控制、事务管理等。 ##### AOP术语 - **切面(Aspect)**:封装了横切关注点的模块。 - **连接点(Joinpoint)**:程序执行中的某个特定点,如方法调用。 ...