2010-02-25 7 views
13

Gibt es einen Logger, der leicht mein Stacktrace protokolliert (was bekomme ich mit ex.printStackTrace())? Ich habe die log4j Dokumente durchsucht und nichts über das Protokollieren des Stacktrace gefunden.Java - Benötigen Sie ein Protokollierungspaket, das den Stacktrace protokolliert

Ich kann mich tue dies mit

StringWriter sw = new StringWriter(); 
ex.printStackTrace(new PrintWriter(sw)); 
String stacktrace = sw.toString(); 
logger.error(stacktrace); 

aber ich will diesen Code nicht ganz über den Platz duplizieren.

Wenn Log4j dies nicht für mich tun wird, gibt es ein anderes Protokollierungspaket, das den Stacktrace für mich protokolliert?

Danke.

Antwort

32

Mit log4j Dies erfolgt mit:

logger.error("An error occurred", exception); 

Das erste Argument ist eine Nachricht angezeigt wird, die zweite ist die Ausnahme (throwable), deren Stacktrace wird protokolliert.

Eine weitere Option ist commons-logging, wo es das gleiche:

log.error("Message", exception); 

Mit java.util.logging kann dieser über erfolgen:

logger.log(Level.SEVERE, "Message", exception); 
+0

Jede Standardeinrichtung, die nur den Stacktra protokolliert ce? Manchmal weiß ich einfach nicht (oder will), was ich in die Nachricht schreiben soll –

3

In java.util.logging können Sie den Logger mit benutzerdefinierten Protokollformatierer wie hier initialisiert werden:

private Logger initTextLogger() throws SecurityException, IOException { 
     Logger logger = Logger.getLogger(YourClass.class.getName()); 
     FileHandler fileHandler = new FileHandler(logFilePath, false); 
     SimpleFormatter logFormatter = new SimpleFormatter() { 
      @Override 
      public String format(LogRecord record) { 
      String stacktrace = ""; 
      Throwable t = record.getThrown(); 
      if(t!=null){ 
       StringWriter sw = new StringWriter(); 
       t.printStackTrace(new PrintWriter(sw)); 
       stacktrace = sw.toString(); 
      }    
      return record.getLevel() + ": " + record.getMessage() + "\r\n" 
        + stacktrace; 
     } 
     }; 
     fileHandler.setFormatter(logFormatter); 
     logger.addHandler(fileHandler); 

     return logger; 
    } 
Verwandte Themen