2012-12-14 7 views
5

Sto usando i comuni che accedono a un'applicazione Java e voglio registrare l'eccezione dallo stack trace.Registrazione di un'eccezione utilizzando commons.logging in Java?

catch(IOException exception) { 
    logger.error("IOException Occured :", exception.fillInStackTrace()); 

     //Print the entire stack trace to log file. 
     throw new AsExceptionUtl(APPMessageHelper.getMessage(APPMessageConstants.ERROR_FailedLoadFile, documentPath)); 
    } 

È questa la strada giusta? E stamperà lo stacktrace nel registro?

risposta

4

Se si desidera registrare l'eccezione, poi basta usare

logger.error("IOException Occured :", exception); 

Se viene visualizzata l'analisi dello stack o no dipende da ciò che l'attuazione di registrazione di fondo è, e come è configurato. AFAIK, la maggior parte o tutte le implementazioni visualizzano la traccia dello stack delle eccezioni per impostazione predefinita.

+0

+1 la traccia di stack è compilata come richiesto e non riesco a pensare a una buona ragione per chiamarla esplicitamente a meno che non vogliate cambiare la traccia dello stack (che ho fatto in una delle mie librerie ma che lo rende una buona idea in generale :) –

+0

@ peter-lawrey @ jb-nizet Quindi cosa farà 'exception.fillInStackTrace()' nel mio caso. –

+2

Nulla, dal momento che il costruttore di Throwable chiama fillInStackTrace() già. La traccia dello stack è lì per impostazione predefinita. Non preoccuparti per questo –

2

Registro di Apache commons spiegato: Non c'è molta documentazione su questo disponibile su internet. Questo è un piccolo articolo a tuo vantaggio:

Per poter registrare i messaggi nel tuo codice java, dovrai importare due classi nel codice sorgente.

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

Ora, per creare il registro, creare un attributo nella classe in uno dei due modi:

private Log m_log = LogFactory.getLog(MyClass.class); 

o

private Log m_log = LogFactory.getLog("MyClassLogger"); 

La prima opzione è solo la creazione di un logger generica per la tua classe, che sarà controllata dalle opzioni di registrazione predefinite. La seconda opzione è la creazione di un logger specifico che è stato chiamato "MyClassLogger", che può essere controllato singolarmente ai valori predefiniti. Si consiglia di farlo se si utilizza un altro codice sorgente di terze parti che utilizza la registrazione ma non si desidera visualizzare i debug o altre informazioni da tale codice sorgente. L'uso del logger è abbastanza semplice. È possibile inviare messaggi di registro chiamando un metodo corrispondente alla priorità:

m_log.fatal(Object message); 
m_log.fatal(Object message, Throwable t); 
m_log.error(Object message); 
m_log.error(Object message, Throwable t); 
m_log.warn(Object message); 
m_log.warn(Object message, Throwable t); 
m_log.info(Object message); 
m_log.info(Object message, Throwable t); 
m_log.debug(Object message); 
m_log.debug(Object message, Throwable t); 
m_log.trace(Object message); 
m_log.trace(Object message, Throwable t); 

Questi metodi sono elencati in ordine di priorità dal più alto al più basso. La registrazione Commons, per impostazione predefinita, è impostata per visualizzare tutti i messaggi da INFO e superiori. Come puoi vedere, ogni metodo è sovraccarico di un metodo in cui puoi inviare un tipo Throwable, ad esempio un'eccezione: molto utile! Questo è tutto quello che devi fare per registrare i messaggi.

Nel tuo caso, basta usare:

logger.error("IOException Occured :", exception); 

Non c'è bisogno di chiamare stackTrace come l'oggetto eccezione qui verrà registrato con l'eccezione generata.

+0

La registrazione di un'eccezione in questo modo non necessariamente registra la traccia dello stack dell'eccezione, ma può semplicemente inserire il messaggio nel registro, ad es. "IOException Occured: Socket closed" e questo è tutto ciò che ottieni. –

Problemi correlati