Spring Boot Logger方面
当访问特定包的类中的方法时,我在记录日志信息时遇到问题。 换句话说,发生“不”记录。 我甚至绝望并添加了System.out.println语句,没有运气。
我的所有类都位于org.my.package包下,即org.my.package.controller , org.my.package.model等。
这是我的Application类:
package org.my.package; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; @Configuration @ComponentScan(basePackages = {"org.my.package.config"}) @EnableAutoConfiguration @EnableAspectJAutoProxy public class FirstWebAppApplication { public static void main(String[] args) { SpringApplication.run(FirstWebAppApplication.class, args); } }
这是我的配置类:
package org.my.package.config; import org.deloitte.javatraining.daythree.utilities.MyLogger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; @Configuration @EnableAspectJAutoProxy @ComponentScan(basePackages = {"org.my.package.utilities"}) public class AssetConfig { //----------------------------------------------------------------------------------------------------------------------- @Bean public MyLogger myLogger(){ return new MyLogger(); } }
这是我的Aspect类:
package org.my.package.utilities; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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.springframework.stereotype.Component; @Aspect @Component public class MyLogger { /** Handle to the log file */ private final Log log = LogFactory.getLog(getClass()); public MyLogger () {} @AfterReturning("execution(* org.my.package.*.*(..))") public void logMethodAccessAfter(JoinPoint joinPoint) { log.info("***** Completed: " + joinPoint.getSignature().getName() + " *****"); System.out.println("***** Completed: " + joinPoint.getSignature().getName() + " *****"); } @Before("execution(* org.my.package.*.*(..))") public void logMethodAccessBefore(JoinPoint joinPoint) { log.info("***** Starting: " + joinPoint.getSignature().getName() + " *****"); System.out.println("***** Starting: " + joinPoint.getSignature().getName() + " *****"); } }
这些是我的Gradle构建依赖项:
dependencies { compile("org.springframework.boot:spring-boot-starter-data-jpa") compile("org.springframework.boot:spring-boot-starter-web") compile('com.h2database:h2:1.3.156') compile('javax.servlet:jstl:1.2') compile('org.springframework.boot:spring-boot-starter-aop') providedRuntime("org.apache.tomcat.embed:tomcat-embed-jasper") testCompile("org.springframework.boot:spring-boot-starter-test") }
我错过了什么或者错误配置我的Aspect类吗? 在使用其他类似的Stack Overflow问题和在线教程进行validation后,我找不到任何错误。
请指教。
你的切点, execution( * org.my.package.*.*(..))
,只匹配org.my.package
包中的类的方法执行而不是子包。
您可能想要的是execution( * org.my.package..*.*(..))
注意..
而不是.
。