SpringBoot AOP如何实现30个Web请求日志统一处理?

2026-05-28 02:461阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计733个文字,预计阅读时间需要3分钟。

SpringBoot AOP如何实现30个Web请求日志统一处理?

说明:在此处使用的日志框架是slf4j结合log4j2,具体的使用方式可以参考以下内容:

《SpringBoot入门三,添加log4j2支持》

与《SpringBoot配置多环境log4j2》

如果使用其他日志组件,通常配置如下:

说明:

日志我这里使用的是slf4j+log4j2,具体的使用方式可以参考​​《SpringBoot入门三,添加log4j2支持》​​​与​​《SpringBoot配置多环境log4j2》​​;如果是使用其他日志组件,正常配置即可.

1.pom.xml添加引用

因为需要对web请求做切面来记录日志,所以需要入AOP模块

<!-- 引入aop切面支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2.添加日志切面类

import java.util.Arrays;

import javax.servlet.localhost/test/helloTwo/张三?age=16

localhost/test/hello?userName=李四&age=17

localhost/test2/eat?foodName=面包

5.2 异常请求

localhost/test2/calc?a=10&b=0

6.扩展知识

6.1 execution(切点函数)

除了返回类型模式、方法名模式和参数模式,其它项都是可选的.语法结构:

execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)

整个表达式可以分为五个部分:

1.execution():表达式主体.

SpringBoot AOP如何实现30个Web请求日志统一处理?

2.第一个*号:表示返回类型,*号表示所有的类型.

3.包名:表示需要拦截的包名

4.第二个*号:表示类名, .*号表示当前包所有的类; ..*表示当前包及所有子包的所有的类

5.*(..) :第三个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数.

表达式

说明

execution(public * *(..))

匹配所有目标类的public方法.

第一个*代表返回类型,

第二个*代表方法名,

..代表任意入参的方法

execution(* *Add(..))

匹配目标类所有以Add为结尾的方法.第一个*代表返回类型,

*Add代表任意以Add为结尾的方法

execution(* com.qfx..*(..))

匹配com.qfx包及子孙包所有类所有方法

execution(* com.qfx.*.*(..))

匹配com.qfx包所有类所有方法

execution(* com.qfx.RoleSerImpl.*(..))

匹配com.qfx包RoleSerImpl类所有方法

execution(* com.qfx..*.Dao.find(..))

匹配com.qfx包下类名后缀为Dao,且方法名以find为前缀的方法

execution(* com.qfx.UserSer+.*(..))

匹配com.qfx包下实现UserSer接口的所有类的所有方法

execution(* info(String, int))

匹配info方法中,第一个参数是String,第二个int的方法

execution(* info(String, *)))

匹配info方法中,第一个参数是String,第二个任意类型

execution(* info(String, ..)))

匹配info方法中,第一个参数是String,后面任意参数

execution(* info(Object+)))

匹配info方法中,方法拥有一个入参,且入参是Object类型或该类的子类


本文共计733个文字,预计阅读时间需要3分钟。

SpringBoot AOP如何实现30个Web请求日志统一处理?

说明:在此处使用的日志框架是slf4j结合log4j2,具体的使用方式可以参考以下内容:

《SpringBoot入门三,添加log4j2支持》

与《SpringBoot配置多环境log4j2》

如果使用其他日志组件,通常配置如下:

说明:

日志我这里使用的是slf4j+log4j2,具体的使用方式可以参考​​《SpringBoot入门三,添加log4j2支持》​​​与​​《SpringBoot配置多环境log4j2》​​;如果是使用其他日志组件,正常配置即可.

1.pom.xml添加引用

因为需要对web请求做切面来记录日志,所以需要入AOP模块

<!-- 引入aop切面支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2.添加日志切面类

import java.util.Arrays;

import javax.servlet.localhost/test/helloTwo/张三?age=16

localhost/test/hello?userName=李四&age=17

localhost/test2/eat?foodName=面包

5.2 异常请求

localhost/test2/calc?a=10&b=0

6.扩展知识

6.1 execution(切点函数)

除了返回类型模式、方法名模式和参数模式,其它项都是可选的.语法结构:

execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)

整个表达式可以分为五个部分:

1.execution():表达式主体.

SpringBoot AOP如何实现30个Web请求日志统一处理?

2.第一个*号:表示返回类型,*号表示所有的类型.

3.包名:表示需要拦截的包名

4.第二个*号:表示类名, .*号表示当前包所有的类; ..*表示当前包及所有子包的所有的类

5.*(..) :第三个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数.

表达式

说明

execution(public * *(..))

匹配所有目标类的public方法.

第一个*代表返回类型,

第二个*代表方法名,

..代表任意入参的方法

execution(* *Add(..))

匹配目标类所有以Add为结尾的方法.第一个*代表返回类型,

*Add代表任意以Add为结尾的方法

execution(* com.qfx..*(..))

匹配com.qfx包及子孙包所有类所有方法

execution(* com.qfx.*.*(..))

匹配com.qfx包所有类所有方法

execution(* com.qfx.RoleSerImpl.*(..))

匹配com.qfx包RoleSerImpl类所有方法

execution(* com.qfx..*.Dao.find(..))

匹配com.qfx包下类名后缀为Dao,且方法名以find为前缀的方法

execution(* com.qfx.UserSer+.*(..))

匹配com.qfx包下实现UserSer接口的所有类的所有方法

execution(* info(String, int))

匹配info方法中,第一个参数是String,第二个int的方法

execution(* info(String, *)))

匹配info方法中,第一个参数是String,第二个任意类型

execution(* info(String, ..)))

匹配info方法中,第一个参数是String,后面任意参数

execution(* info(Object+)))

匹配info方法中,方法拥有一个入参,且入参是Object类型或该类的子类