`
kuailenanhaier
  • 浏览: 33276 次
社区版块
存档分类
最新评论

springboot aop日志记录

 
阅读更多
一、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日志

    在本项目中,"SpringBoot+AOP日志"是一个基于Spring Boot框架的日志管理系统,它利用了Spring Boot的便利性和AOP(面向切面编程)技术来实现对应用程序日志的高效、统一处理。让我们深入探讨一下这个项目的核心知识...

    SpringBoot AOP各种注解、自定义注解、鉴权使用案例(免费下载)

    SpringBoot AOP,即面向切面编程,是Spring框架中的一个重要特性,用于实现代码的横切关注点,如日志记录、事务管理、权限验证等。AOP通过使用代理模式,将这些关注点与核心业务逻辑分离,使得代码更加模块化,更...

    springBoot+aop+自定义注解+本地线程实现统一接口日志及接口响应时长

    内容概要:springboot+拦截器+aop+自定义注解+本地线程实现统一接口日志记录,记录下接口所在模块、接口描述、接口请求参数、接口返回参数、接口请求时间以及接口耗时用于接口优化,接口记录参数以及操作人防止使用...

    SpringBoot使用AOP注解记录操作日志

    AOP(面向切面编程)是一种强大的工具,它允许我们在不改变原有业务逻辑的情况下,对代码进行横向扩展,比如添加日志记录功能。本篇文章将深入探讨如何在Spring Boot中利用AOP注解来实现操作日志的记录。 首先,...

    spring boot aop 统一处理日志

    在Spring Boot应用中,AOP(面向切面编程)是一种强大的工具,用于实现代码的解耦和模块化,尤其适用于处理横切关注点,如日志记录、事务管理、安全控制等。本教程将深入探讨如何利用Spring Boot的AOP特性来实现日志...

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...

    swagger和spring Aop日志结合

    另一方面,Spring AOP(面向切面编程)则是Spring框架的一个核心特性,用于实现跨切面的关注点,如日志记录。本篇文章将深入探讨如何将Swagger与Spring AOP结合起来,以实现优雅的日志记录功能。 首先,让我们了解...

    springBoot+aop 简单demo

    而AOP(Aspect Oriented Programming,面向切面编程)则是Spring框架的一个重要特性,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强或日志记录等操作。现在我们来详细探讨Spring Boot集成AOP的基本...

    SpringBoot+AOP+TraceID.pdf

    SpringBoot+AOP+TraceID.pdf 本文档主要讲解了 SpringBoot 中 AOP(Aspect Oriented Programming)的应用和 TraceID 的实现...AOP 可以使得代码更加灵活和可维护,而 TraceID 可以帮助我们更好地跟踪和分析日志记录。

    springboot spring aop 拦截器注解方式实现脱敏

    在Spring Boot应用中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们创建横切关注点,如日志记录、权限检查等,这些关注点可以被编织到应用程序的多个点上,而无需侵入核心业务逻辑。在本案例中,我们将...

    SpringBoot+AOP日志服务

    SpringBoot+AOP日志服务是将流行的Java...综上所述,SpringBoot+AOP日志服务利用Spring Boot的便捷性和AOP的强大功能,实现了一套完整的日志记录和查询系统,既方便了开发者调试,也为运营人员提供了有力的监控工具。

    springboot 脱敏自定义注解

    在Spring中,AOP主要用于日志记录、性能监控、事务管理等方面。我们可以定义一个切面,包含一系列关注点,当这些关注点与业务代码(即切点)匹配时,切面的逻辑将被插入到切点中执行。 在本例中,"springboot 脱敏...

    spring-boot aop

    在Spring框架中,AOP主要用于日志记录、事务管理、性能统计等场景。本示例是关于如何在Spring Boot项目中实现AOP功能的一个简单演示。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越...

    Springboot整合Aop.zip

    - **日志记录**:通过 AOP,可以在方法执行前后自动记录日志,避免在每个需要日志的地方重复写代码。 - **性能监控**:利用 AOP 记录方法执行时间,分析系统性能瓶颈。 - **权限控制**:在安全方面,AOP 可以...

    springBoot+mybatis读写分离(AOP)

    AOP则是Spring框架的核心特性,用于在不修改原有代码的情况下,对特定行为(如日志记录、权限检查等)进行横切关注。 在Spring Boot项目中,我们可以通过AOP来实现读写分离。首先,我们需要定义两个数据源,一个...

    springboot+aspect实现springaop拦截指定方法.zip

    例如,可以创建一个`@Loggable`注解,然后在Aspect中定义切点`@Around("@annotation(loggable)")`,这样所有带有`@Loggable`的方法都会被拦截并进行日志记录。 6. **AspectJ**:AspectJ是一个全面的AOP语言,比...

    SpringBoot AOP处理请求日志打印功能代码实例

    通过示例代码,详细介绍了如何使用AOP来记录操作日志,包括请求开始、执行成功和异常等情况下的日志记录。该代码实例能够帮助读者更好地理解AOP的应用场景和实现方法。 知识点1: AOP的概念和应用场景 AOP是面向...

    使用SpringBoot+AOP实现可插拔式日志的示例代码

    使用 SpringBoot+AOP ...本文详细介绍了使用 SpringBoot+AOP 实现可插拔式日志的示例代码,包括创建 SysLog 注解、SysLogAspect 类,以及记录日志的逻辑。该示例代码对于大家的学习或者工作具有一定的参考学习价值。

    解决springboot的aop切面不起作用问题(失效的排查)

    SpringBoot中的AOP(Aspect-Oriented Programming)切面是指在业务逻辑中添加的额外功能,以实现日志记录、安全检查、事务管理等功能。但是,在实际开发中,我们可能会遇到AOP切面不起作用的问题。下面我们将介绍...

    高级软件人才培训专家-day13-SpringBoot AOP

    横切关注点是指那些跨越多个模块的功能,如日志记录、安全控制、事务管理等。 ##### AOP术语 - **切面(Aspect)**:封装了横切关注点的模块。 - **连接点(Joinpoint)**:程序执行中的某个特定点,如方法调用。 ...

Global site tag (gtag.js) - Google Analytics