2015-05-19 25 views
12

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.

+1

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ì' .'. –

+0

* 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

Trả lời

12

Điểm cắt của bạn, execution(* org.my.package.*.*(..)), chỉ phù hợp với việc thực hiện các phương thức trên các lớp trong gói org.my.package không phải gói phụ.

Điều bạn có thể muốn là execution(* org.my.package..*.*(..)) thông báo .. thay vì ..

Các vấn đề liên quan