2012-07-16 16 views
5

Estoy implementando un registrador como un aspecto utilizando Spring AOP y Log4J, pero me he dado cuenta de que el nombre de clase en el archivo de registro siempre es el nombre de clase LoggerAspect, así que ... ¿Hay alguna manera de rastrear el nombre de clase real en mi registro?Log4j y AOP, cómo obtener el nombre de clase real

+0

¿Se puede hacer una parte del mensaje en sí? – mazaneicha

+0

Vea también: [Spring: Aspecto de registro estándar (interceptor)] (http://stackoverflow.com/questions/7302090) –

Respuesta

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

Esto incluso funciona para las clases de proxy (el nombre sin proxy se muestra en el mensaje de registro). – jolo

7

esto es más fácil:

pjp.getTarget().getClass() 
+0

Pero un problema es que ProceedJoinPoint solo se admite para consejos sobre todo, pero no antes o después –

Cuestiones relacionadas