2012-10-04 17 views
13

In questo momento sto utilizzando java.util.logging per registrare i punti di ingresso e di uscita di ciascun metodo nel mio progetto Java. Questo è molto utile per me durante il debug.Come registrare automaticamente la voce/l'uscita dei metodi in Java?

ho questo pezzo di codice all'inizio di ogni metodo e uno simile alla fine:

if (logger.isLoggable(Level.FINER)) { 
    logger.entering(this.getClass().getName(), "methodName"); 
} 

Dove "nomeMetodo" è il nome del metodo (hardcoded).

Quindi mi chiedevo se c'è un modo per farlo automaticamente senza dover includere questo codice in ogni metodo.

risposta

10

Suggerisco l'uso di Aspect Oriented Programming.

Ad esempio, utilizzando il AspectJ compilatore (che può essere integrato a Eclipse, Emacs e altri IDE), è possibile creare un pezzo di codice come questo:

aspect AspectExample { 
    before() : execution(* Point.*(..)) 
    { 
     logger.entering(thisJoinPointStaticPart.getSignature().getName(), thisJoinPointStaticPart.getSignature().getDeclaringType() ); 

    } 

    after() : execution(* Point.*(..)) 
    { 
     logger.exiting(thisJoinPointStaticPart.getSignature().getName() , thisJoinPointStaticPart.getSignature().getDeclaringType() ); 

    } 
} 

Questo aspetto aggiunge un codice di registrazione dopo e prima dell'esecuzione di tutti i metodi nella classe "Punto".

+0

Funziona nelle applicazioni offline? Quali non sono in esecuzione su un server? –

+0

@ArturasM sì, il codice byte AspectJ è intessuto nelle classi di destinazione, quindi viene eseguito direttamente nella JVM. Quindi, qualsiasi JVM compatibile con le specifiche Java può eseguirlo. – Keith

1

Si dovrebbe guardare Aspect Oriented Programming, in particolare il around() joinpoint che sarebbe utile per registrare l'entrata e l'uscita dei metodi che si desidera qualificarsi in la definizione.

4

Come già suggerito, utilizzare AOP con @Loggable annotazione dal jcabi-aspects (Sono uno sviluppatore):

@Loggable(Loggable.DEBUG) 
public String load(URL url) { 
    return url.openConnection().getContent(); 
} 

La biblioteca contiene anche un aspetto AOP che comprende queste annotazioni e registra le chiamate di metodo, i loro argomenti automaticamente, e tempo di esecuzione tramite SLF4J.

Inoltre, controllare questo post del blog che spiega i dettagli: http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html

Problemi correlati