2015-05-19 53 views
12

Belirli bir paketin sınıflarından alınan yöntemlere erişildiğinde, günlüğe kaydetme günlüğümün bilgileri kaydetmesiyle ilgili sorunlar yaşıyorum. Başka bir deyişle, "hayır" kaydı gerçekleşir. Hatta umutsuz ve şanssız bir şekilde System.out.println ifadelerini ekledim. benim sınıflarınSpring Boot Logger Unsurlar

Tüm vb yani org.my.package.controller, org.my.package.model, İşte

, org.my.package paketin altında bulunur benim Uygulama sınıfı:

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(); 
    } 
} 
: Bu benim yapılandırma sınıftır

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); 
    } 
} 

Bu benim Aspect sınıfı:

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() + " *****"); 
    } 
} 

Bunlar benim Gradle bağımlılıkları inşa şunlardır:

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") 
} 

şey veya başka benim Aspect sınıfı yanlış yapılandırılması eksik? Başka, benzer Stack Overflow soruları ve çevrimiçi eğiticilerle doğrulandıktan sonra yanlış bir şey bulamıyorum.

Lütfen bildiriniz.

+1

Şu anda yalnızca alt sınıflardaki "org.my.package" değil, sınıflardaki yöntemleri eşleştiriyorsunuz. Muhtemelen istediğin şey infazdır (* org.my.package .. *. * (..)) '' yerine '.' yerine. –

+0

* yüz palmiyesi * Teşekkürler! Öyleydi. Lütfen bir cevabı yanıtlayın, bu nedenle bu soru için size kredi verebilirim. – Rick

cevap

12

Puan kesme, execution(* org.my.package.*.*(..)), yalnızca alt paketlerin değil, org.my.package paketindeki yöntemlerin yürütülmesiyle eşleşiyor.

Muhtemelen istediğiniz execution(* org.my.package..*.*(..)), . yerine .. bildiriyor.

İlgili konular