springboot添加AOP日志配置详解

 更新时间:2023年10月25日 11:07:26   作者:刻苦的樊同学  
这篇文章主要介绍了springboot添加AOP日志配置详解,日志是一种在软件开发中常用的技术,用于记录和跟踪应用程序的运行过程,通过AOP日志,开发人员可以实时监控应用程序的行为,包括方法的调用、参数的传递和返回值的获取等,需要的朋友可以参考下

1,pom.xml配置

文件中添加以下配置

<!--spring aop 包-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2,自定义配置文件logback.xml

该配置文件位置在templates文件夹下第一层,和html文件夹位置并列。

在这里插入图片描述

3,logback.xml文件配置内容

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="D:/projects/log" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/springbootdemo.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
 
 
 
 
    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="DEBUG"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
 
 
    <!-- 日志输出级别
      trace<debug<info<warn<error<fatal
    级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个级别的日志都会输出。
    trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
    debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。
    info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。
    warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。
    error: 错误信息。用的也比较多。
    fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。
   -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
    <!--日志异步到数据库 -->
    <!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">-->
    <!--<!–日志异步到数据库 –>-->
    <!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">-->
    <!--<!–连接池 –>-->
    <!--<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">-->
    <!--<driverClass>com.mysql.jdbc.Driver</driverClass>-->
    <!--<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>-->
    <!--<user>root</user>-->
    <!--<password>root</password>-->
    <!--</dataSource>-->
    <!--</connectionSource>-->
    <!--</appender>-->
</configuration>

4,写一个LogUtil类

@Component
@Aspect
public class logUtil {
    /**
     * 切入点配置
     */
    @Pointcut(value = "execution(* com.aaa.service.*.*(..))")
    public void pointCutOne(){
    }<br>
    /**
     * 前置通知
     * @param joinPoint
     */
   // @Before(value = "pointCutOne()")
    public void beforeSaveLog(JoinPoint joinPoint){
        System.out.println("在调用"+joinPoint.getSignature().getName()+"方法之前,打印。。。");
    }
 
    /**
     * 后置通知
     * @param joinPoint
     */
    @After(value = "pointCutOne()")
    public void afterReturningSaveLog(JoinPoint joinPoint){
        System.out.println("在调用"+joinPoint.getSignature().getName()+"方法之后,打印。。。");
    }
 
    /**
     * 异常通知
     * @param joinPoint
     * @param e
     */
    @AfterThrowing(value = "pointCutOne()",throwing = "e")
    public void afterThrowingSaveLog(JoinPoint joinPoint,Exception e){
        System.out.println("在调用"+joinPoint.getSignature().getName()+"方法时出现了"+e.getClass().getName()+"异常,异常描述:"+e.getMessage());
    }<br>
    /**
     * 最终通知
     */
    @AfterReturning(value = "pointCutOne()")
    public void afterSaveLog(JoinPoint joinPoint){
        System.out.println("在调用"+joinPoint.getSignature().getName()+"方法时,无论有没有异常都会打印。。。");
    }<br>
    /**
     * 环绕通知
     */
    public Object aroundSaveLog(ProceedingJoinPoint proceedingJoinPoint){
        Object proceed = null;
        System.out.println(System.currentTimeMillis()+"执行业务方法之前---");
        try {
            proceed =  proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println(System.currentTimeMillis()+"执行业务方法之后---");
        return proceed;
    }
}

到此这篇关于springboot添加AOP日志配置详解的文章就介绍到这了,更多相关springbootAOP日志配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Java中Object 类的使用

    详解Java中Object 类的使用

    Java的Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,本文主要来和大家讲讲Object 类的使用,感兴趣的可以了解一下
    2023-05-05
  • SpringBoot+Spring Security+JWT实现RESTful Api权限控制的方法

    SpringBoot+Spring Security+JWT实现RESTful Api权限控制的方法

    这篇文章主要介绍了SpringBoot+Spring Security+JWT实现RESTful Api权限控制的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java数据结构中七种排序算法实现详解

    Java数据结构中七种排序算法实现详解

    这篇文章主要介绍了Java数据结构中七种排序算法的实现方法,排序算法可分为两大类,比较类排序和非比较类排序,顾名思义可知它们是通过比较来决定元素间的相对次序,需要详细了解排序算法的朋友可以参考下
    2024-02-02
  • SpringBoot多环境配置及日志记录器详解

    SpringBoot多环境配置及日志记录器详解

    这篇文章主要介绍了SpringBoot多环境配置及日志记录器详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • 给@Value设置默认值以及为static变量赋值问题

    给@Value设置默认值以及为static变量赋值问题

    在Spring框架中,@Value注解用于属性注入,可将配置文件中的值赋给变量,未指定默认值时,若配置文件缺少相应属性,程序启动会报错,可通过设定默认值防止此问题,对于静态变量,由于@Value无法直接注入,需通过Set方法赋值,该方法也支持默认值设置
    2024-09-09
  • SpringBoot如何处理@KafkaListener消息

    SpringBoot如何处理@KafkaListener消息

    Spring通过KafkaMessageListenerContainer、ConcurrentMessageListenerContainer等组件实现Kafka消息的监听和处理,并通过@KafkaListener注解将业务逻辑与Kafka消费者连接起来,Spring Boot自动配置Kafka相关组件,简化了Kafka的使用
    2024-12-12
  • SpringMVC拦截器超详细解读

    SpringMVC拦截器超详细解读

    SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。 依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用
    2022-07-07
  • Java中DecimalFormat用法详解

    Java中DecimalFormat用法详解

    这篇文章主要为大家详细介绍了Java中DecimalFormat的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • POI读取excel简介_动力节点Java学院整理

    POI读取excel简介_动力节点Java学院整理

    这篇文章主要介绍了POI读取excel简介,详细的介绍了什么是Apache POI和组件,有兴趣的可以了解了解一下
    2017-08-08
  • SpringBoot整合MyBatis-Plus的示例代码

    SpringBoot整合MyBatis-Plus的示例代码

    这篇文章主要介绍了SpringBoot整合MyBatis-Plus的示例代码,使用 MyBatis-Plus 可以减少大量的开发时间,单表的增删改查可以不用写 sql 语句,本文主要介绍整合需要主要事项,需要的朋友可以参考下
    2022-03-03

最新评论