我的Spring Boot项目AOP日志配置后不生效,该如何解决?
问题排查及解决方案
- 1. 切面重复注册冲突
你当前既在AopLoggingConfig类上标注了@Component注解,又在启动类中通过@Bean手动注册了该切面的实例,重复注册会导致切面逻辑无法正常触发。请删除启动类中如下代码:
@Bean public AopLoggingConfig loggingAspect(){ return new AopLoggingConfig(); }
启动类的@ComponentScan已经配置了扫描com.demo.apiservice包,AopLoggingConfig在对应扫描路径下,@Component注解即可完成切面的自动注册,无需手动声明Bean。
- 2. 日志级别配置错误
切面中使用logger.debug输出日志,但你application.yml中没有配置com.demo.apiservice包的日志级别为DEBUG,默认日志级别是INFO,DEBUG级别的日志会被直接过滤,你观察不到输出不等于切面没生效。请在logging.level配置下添加对应包的级别配置:
logging: level: com: demo: apiservice: DEBUG # 保留原有其他配置即可
- 3. 切面逻辑语法修正(若存在)
你贴出的切面代码中,类型判断的代码存在语法缺失:
// 原代码(缺失比较运算符) if (type.indexOf("Controller") -1)
请修正为:
if (type.indexOf("Controller") > -1)
后面Service、DAO的判断同理补全>运算符,否则代码会编译报错无法运行。
- 4. 切点范围按需调整(可选)
当前你的切点表达式execution(* com.demo.apiservice.customer.*Controller.*(..))仅匹配com.demo.apiservice.customer包下的Controller类方法,如果需要同时拦截Service、DAO层的方法,可以调整切点表达式,比如:
// 匹配com.demo.apiservice下所有Controller、Service、DAO层的公共方法 @Around("execution(public * com.demo.apiservice..*Controller.*(..)) || execution(public * com.demo.apiservice..*Service.*(..)) || execution(public * com.demo.apiservice..*DAO.*(..))")
修改完成后重新启动项目,调用接口即可看到切面输出的日志。
内容的提问来源于stack exchange,提问作者Sangyoub Lee
相关产品推荐
相关产品推荐

