2012-07-16 17 views
5

Wprowadzam program rejestrujący jako aspekt przy użyciu Spring AOP i Log4J, ale zauważyłem, że nazwa klasy w pliku dziennika jest zawsze nazwą klasy LoggerAspect, więc .. Czy istnieje sposób śledzenia rzeczywistej nazwy klasy w moim dzienniku?Log4j i AOP, jak uzyskać aktualną nazwę klasy

+0

można uczynić go częścią samej wiadomości? – mazaneicha

+0

Zobacz też: [Spring: Standardowy aspekt rejestrowania (przechwytywania)] (http://stackoverflow.com/questions/7302090) –

Odpowiedz

6
@Around("execution(* com.mycontrollerpackage.*.*(..))") 
public Object aroundWebMethodE(ProceedingJoinPoint pjp) throws Throwable {  
    String packageName = pjp.getSignature().getDeclaringTypeName(); 
    String methodName = pjp.getSignature().getName(); 
    long start = System.currentTimeMillis(); 
    if(!pjp.getSignature().getName().equals("initBinder")) { 
     logger.info("Entering method [" + packageName + "." + methodName + "]"); 
    } 
    Object output = pjp.proceed(); 
    long elapsedTime = System.currentTimeMillis() - start; 
    if(!methodName.equals("initBinder")) { 
     logger.info("Exiting method [" + packageName + "." + methodName + "]; exec time (ms): " + elapsedTime); 
    } 
    return output; 
} 
+0

Działa to nawet w przypadku klas proxy (nazwa nieokreślona jest wyświetlana w komunikacie dziennika). – jolo

7

łatwiej to:

pjp.getTarget().getClass() 
+0

Ale jeden problem ProceedingJoinPoint jest obsługiwany tylko dla porady tylko nie dla przed lub po –

Powiązane problemy