2011-09-22 51 views
0

我張貼這在另一個論壇,想看看我是否能接觸到更多的人需要諮詢/評論。Spring AOP和AspectJ。圍繞諮詢

我的工作對由不同的Spring的web應用程序的應用程序。

說,我們有:

  • ComponentA.jar
  • ComponentB.jar

和WAR文件:

  • Foo.war(包含ComponentA)
  • 巴阿.war(包含ComponentA & 組件B)

我們使用Logback登錄到我們的調試日誌。所以說,不同類別的應用程序有以下記錄聲明:

private static final Log log = LoggerFactory.getLogger(NAME_OF_WAR_FILE + "." + NAME_OF_CONTAINING_COMPONENT + "." + PACKAGE.CLASS_NAME); 

所以例如:

package a.b.c; 

public class SomeClass { 
    private static final Log log = LoggerFactory.getLogger("Foo.war" + "." + "ComponentA" + "." + SomeClass.class); 
} 

package x.y.z; 

public class SomeOtherClass { 

    private static final Log log = LoggerFactory.getLogger("Baa.war" + "." + "ComponentA" + "." + SomeOtherClass .class); 
} 

假設戰爭文件和組件的名字是由一個屬性,而不是設置硬編碼。

是否有可能有一個看點和建議,可以像下面的東西(假,因爲我不知道這是可以做到):

@Aspect 
public class TheAspect{ 

    @Around("execution of a method") 
    public Object aroundSomething(ProceedingJoinPoint pjp){ 

     Log log = get the log instance from the class that this advice is running on 

     if(log.isDebugEnabled()) 
     // log something 

     Object o = pjp.proceed(); 

     if(log.isDebugEnabled()) 
     // log something else 

    return o; 

    } 
} 

這裏的關鍵是要寫入日誌文件使用包含被建議攔截的方法的類實例日誌。

的應用是作爲Foo.war和Baa.war組成的單個web應用程序。 Foo.war和Baa.war都寫入相同的日誌文件。

實施例:

2011-09-22 14:35:35.159 MDT,DEBUG,Foo.war.ComponentA.a.b.c.SomeClass,Hello World Debug message 
2011-09-22 14:35:35.159 MDT,DEBUG,Baa.war.ComponentA.a.b.c.SomeClass,Hello World Debug message 
2011-09-22 14:35:35.159 MDT,DEBUG,Baa.war.ComponentB.x.y.z.SomeOtherClass,Hello World Debug message 

預先感謝。

回答

0

您可以使用您的thisJoinPoint方法aroundSomething裏面。

要獲取類名:

Signature sig = thisJoinPoint.getSignature(); 
String className = sig.getDeclaringTypeName(); 

您還可以獲得類對象:

Class<?> type = sig.getDeclaringType(); 

也許你可以使用包識別您的war文件:

Package pack type.getPackage(); 
+0

感謝您的信息。我想過這個。唯一的問題是,我處理與現有的即充滿了日誌聲明爲'私有靜態最後登錄日誌=代碼...'和編輯所有類把干將/日誌制定者將是矯枉過正。我主要是問這個問題,看看別人會怎麼想,但這可能是不值得的麻煩。 –

+0

@JcxJc如果你想訪問一個方面的私人領域,你可以[特權](http://www.eclipse.org/aspectj/doc/released/progguide/semantics-aspects.html#aspect-privilege) 。 –