2015-02-02 2 views
5

La mia domanda è: è meglio accedere con getMessage o con toString o entrambi? prendere in considerazione gli errori di account generati dall'open source. Ho visto le domande nei commenti ma non ho avuto una risposta a questo. Forse mi sono perso qualcosa? Non importa il piccolo colpo di prestazioni di registrare uno di loro, ma non vuoi loggarli entrambi a meno che non ci sia una buona ragione.Eccezioni di registrazione Java, utilizzare getMessage o toString: log.warn (ex.getMessage()) o log.warn (ex) funziona con open source

Log di significato (ex) o log (ex.getMessage), Non si parla di traccia dello stack.

Sega 1, 2 e 3

eccezioni di registrazione: che è meglio: log.warn (ex.getMessage(), ex) o log.warn (ex, ex);

ho notato a volte getMessage ritorna vuoto o nullo, così in medicina generale v'è alcuna ragione per non utilizzare:

log.warn(ex, ex); 

come sembra stampare il nome della classe e il messaggio (se impostato)? Immagino che una ragione potrebbe essere se una sottoclasse ha oltrepassato la corda per non stampare il messaggio, ma in realtà fa una qualsiasi delle librerie di ibernazione, apache o di primavera?

+0

possibile duplicato di [Segnalare il messaggio di testo delle eccezioni?] (Http://stackoverflow.com/questions/7320080/should-you-report-the-message-text-of-exceptions) – Raedwald

+0

Vedere anche http : //stackoverflow.com/questions/7361201/when-to-log-a-stacktrace-for-a-aught-exception – Raedwald

+0

Come mostrano le due domande collegate (che rende questa domanda un duplicato), penso che la risposta non sia . Registrare una traccia dello stack solo per le eccezioni che indicano un bug; sono utili solo per i programmatori; la presenza di un bug non è qualcosa su cui semplicemente mettere in guardia. Non utilizzare il testo del messaggio di eccezioni nei messaggi di lig destinati agli utenti abc (piuttosto che agli orogrammatori). – Raedwald

risposta

8

Come su

log.warn("some descriptive message, maybe with context {}", 
    someId, ex); 

I dettagli di eccezione sarà già stampati come parte del stacktrace, quindi non è necessario includerli nel messaggio di solito.

Se si desidera sopprimere lo stacktrace e stampare solo il messaggio di eccezione, in genere, ex.toString() funziona meglio di ex.getMessage(), poiché include anche il nome della classe di eccezione, che il messaggio non ha. Infatti, spesso il messaggio è vuoto (ad esempio con NullPointerExceptions).

+0

Sì, lo faccio già, stampate vars locali ecc. E usate AOP per i parametri del metodo, era più sull'eccezione stessa aStirng o getMessage o entrambi? Domanda aggiornata – tgkprog

+1

Se si desidera riformulare la domanda su 'log.warn (ex);' vs 'log.warn (ex.getMessage())' (con le uniche due opzioni), quindi sì: voto per la prima uno. Ciò include il messaggio, come specificato da http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#toString%28%29 Qualcuno potrebbe sovrascriverlo per renderlo meno utile? Suppongo. Ma non l'ho mai visto accadere. – Thilo

+0

puoi modificare la tua risposta solo per parlare dell'eccezione getMessage e toString? – tgkprog