2012-05-07 8 views

risposta

88

significa che si dovrebbe usare quadro di registrazione come o invece di eccezioni di stampa direttamente:

e.printStackTrace(); 

è necessario accedere utilizzando API questo framework:

log.error("Ops!", e); 

quadri di registrazione vi danno molta flessibilità, es puoi scegliere se vuoi accedere alla console o al file - o magari saltare alcuni messaggi se li trovi non più rilevanti in qualche ambiente.

31

Se si chiama printStackTrace() su un'eccezione, la traccia viene scritta su System.err ed è difficile instradarla altrove (o filtrarla). Invece di farlo, si consiglia di utilizzare un framework di registrazione (o un wrapper su più framework di registrazione, come Apache Commons Logging) e registrare l'eccezione utilizzando tale framework (ad esempio logger.error("some exception message", e)).

Facendo che consente di:

  • scrivere la dichiarazione di registro in posizioni diverse in una sola volta, ad esempio, la console e un file
  • filtrano le istruzioni del registro per gravità (errore, avviso, informazioni, debug ecc.) e origine (normalmente pacchetto o classe)
  • influiscono sul formato del registro senza dover modificare il codice
  • ecc programma di qualità
+0

solo dicendo grazie qui per un prezioso feedback altrove ;-) – GhostCat

14

una produzione dovrebbe utilizzare una delle tante alternative di registrazione (ad esempio log4j, logback, java.util.logging) per segnalare errori ed altre diagnostiche. Questo ha un numero di vantaggi:

  • I messaggi di registro vanno in un percorso configurabile.
  • L'utente finale non vede i messaggi a meno che non si configuri la registrazione in modo che lui/lei faccia.
  • È possibile utilizzare diversi logger e livelli di registrazione, ecc. Per controllare la quantità di registrazione ridotta o molto ridotta.
  • È possibile utilizzare diversi formati di appender per controllare l'aspetto della registrazione.
  • È possibile collegare facilmente l'uscita di registrazione a un più ampio framework di monitoraggio/registrazione.
  • Tutto quanto sopra può essere fatto senza modificare il codice; Ad esempio, modificando il file di configurazione della registrazione dell'applicazione distribuita.

Al contrario, se si utilizza printStackTrace, l'utente deployer/finale ha poco o nessun controllo, e messaggi di registrazione sono suscettibili di essere sia perso o mostrato all'utente finale in circostanze inappropriate.(E nulla terrorizza un utente timido più di una traccia casuale dello stack.)

1

Quasi ogni framework di registrazione fornisce un metodo con cui possiamo passare l'oggetto gettato insieme a un messaggio. Come:

public trace(Marker marker, String msg, Throwable t); 

Stampano lo stacktrace dell'oggetto da gettare.

3

In Semplice, e.printStackTrace() non è una buona pratica, perché esso stampa appena fuori l'analisi dello stack standard error. Per questo motivo non è possibile controllare realmente dove va questa uscita.

Problemi correlati