Tôi gặp sự cố khi nhận khía cạnh ghi nhật ký của mình để ghi lại thông tin khi truy cập các phương thức từ các lớp của một gói cụ thể. Nói cách khác, "không" đăng nhập xảy ra. Tôi thậm chí còn tuyệt vọng và thêm vào các câu lệnh System.out.println, không có may mắn.Các phương tiện ghi nhật ký khởi động mùa xuân
Tất cả các lớp học của tôi đều nằm trong gói org.my.package, tức là org.my.package.controller, org.my.package.model vv
Đây là lớp ứng dụng của tôi:
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);
}
}
Đây là lớp cấu hình của tôi:
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();
}
}
Đây là lớp Aspect của tôi:
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() + " *****");
}
}
Đây là những Gradle tôi xây dựng phụ thuộc:
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")
}
Tôi có thiếu một cái gì đó hoặc mis-cấu hình lớp Aspect của tôi? Tôi không thể tìm thấy bất kỳ điều gì sai, sau khi xác minh với các câu hỏi Stack Overflow tương tự khác và các hướng dẫn trực tuyến.
Vui lòng thông báo.
Hiện tại, bạn chỉ đang đối sánh các phương thức trên các lớp trong gói 'org.my.package' chứ không phải gói phụ. Những gì bạn có thể muốn là 'thực hiện (* org.my.package .. *. * (..))' thông báo '..' thay vì' .'. –
* mặt cọ * Cảm ơn !! Điều đó là vậy đó. Vui lòng trả lời bằng câu trả lời, vì vậy tôi có thể cung cấp cho bạn tín dụng cho câu hỏi này. – Rick