2012-02-20 13 views
14

Esiste un modo per scrivere il registro degli errori o l'eccezione in un file in java. ho passato Log4j. Ho cercato su Google ma non ho trovato una buona soluzione. Ho scritto un codice sempliceCome scrivere il registro degli errori o l'eccezione nel file in java

catch (Exception e) { 
    PrintWriter pw = new PrintWriter(new FileOutputStream("Log"));  
    e.printStackTrace(pw); 
} 

Esiste un altro modo per registrare gli errori o l'eccezione? Qualunque corpo può fornirmi un esempio di esempio di Log4j?

risposta

22

Prima leggi log4j Manual, è facile per configurare un file di registro progressivo. Non è necessario eseguire operazioni di file esplicite.

#SET LEVEL of ROOT-LOGGER, you will like to have Debug in local, but in prod you may just want WARN and ABOVE. This setting is done here! 
log4j.rootLogger=debug, stdout, R 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

# Pattern to output the caller's file name and line number. (basically, format of log) 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

# THIS IS WHERE YOU WILL HAVE ALL THE LOG WRITTEN 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=/var/log/applogs/example.log 

# Maximum size of log file, usually we keep 10MB 
log4j.appender.R.MaxFileSize=100KB 
# Keep one backup file, usually we keep 10 
log4j.appender.R.MaxBackupIndex=1 

log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 

In secondo luogo, ogni volta che si cattura un'eccezione, fare come questo

public class MyClass{ 

    private static Logger logger = Logger.getLogger(MyClass.class); 

    public ReturnType myMethod(Param p, Param2 p2) { 
    .... 
    .... 
    try { 
     ..  
    } catch(MyException e) { 
     logger.log("Exceptions happen!", e); //this will put all the details in log file configured earlier 
    } 
    .... 
    } 

    .... 
} 

E 'la pena di leggere il manuale. Ancora meglio leggere Complete log4j Manual

+1

e cosa faccio quando vengono visualizzate le eccezioni deselezionate? Come posso essere sicuro che TUTTO verrà inviato al registratore? – Blauhirn

+0

Usa 'Throwable' per catturare * tutto *. Non consigliabile comunque. Potresti voler leggere questi post: 1. http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation 2. http://stackoverflow.com/questions/2274102/difference-between -uso-gettabile-ed-eccezione-in-un-try-catch – Nishant

+0

@Nishant Dove si trova il file di registro ?? È all'interno della cartella apache? – KJEjava48

2

Usando log4j è possibile accedere exceptiosn abbastanza facilmente:

try { 
    ... 
} catch(Exception e) { 
    log.error("An exception! Oops!", e); 
} 
4
try { 
     System.setErr(new PrintStream(new FileOutputStream(System.getProperty("user.home")+"/error.log"))); 
} catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
} 

Ora tutto l'output errore viene scritto in questo file

+1

Mentre tecnicamente corretto, come è meglio utilizzare un framework di registrazione (log4j, juli, commons-logging ecc.)? – pap

+2

Perché utilizzare un framework, quando è possibile risolverlo con i propri metodi java? – Thargor

+3

1: Nessun supporto per i diversi livelli di log 2: nessun supporto per contesti diagnostici (filo, di classe, metodo, ecc) 3: Nessun supporto per l'uscita formattazione Potrei andare avanti. Puoi martellare un chiodo con un cacciavite, ma perché non dovresti usare un martello se ne hai uno? – pap

3

È possibile aggiungere l'eccezione come parametro per la sua dichiarazione log4j, per esempio

catch(Exception e) 
{ 
    logger.error("Unexpected error", e); 
} 

fornito hai un file appender esecuzione OK, questa uscita volontà la traccia completa dello stack dell'eccezione.

1

Look this tutorial about "File Appender"

Vedi official Log4j short introduction e la sezione "Configurazione".

È inoltre possibile effettuare la ricerca su "RollingFileAppender" o "File appender".

Configurare il registratore per inviare il suo messaggio a un appender. Questo appender può inoltrare un messaggio verso la console (stdin), verso un file (FileAppender, RollingFileAppender ...) ...

Utilizzare questo per eseguire log degli errori:

try{ 
    throw new Exception("bla bla bla..."); 
} catch(Exception e){ 
    // log without stack trace 
    mLogger.error("Your log message"); 

    // log with stack trace 
    mLogger.error("Your log message", e); 
}