2010-02-25 4 views
13

Y at-il un enregistreur qui se connectera facilement mon stacktrace (ce que je reçois avec ex.printStackTrace())? J'ai recherché les docs de log4j et n'ai trouvé rien au sujet de la notation de la pile.Java - Besoin d'un paquet de journalisation qui enregistrera le stacktrace

que je peux faire moi-même avec

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

mais je ne veux pas copier ce code dans tous les sens.

Si log4j ne le fera pas pour moi, y a-t-il un autre paquet de log qui va connecter le stacktrace pour moi?

Merci.

Répondre

32

En utilisant log4j cela se fait avec:

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

Le premier argument est un message à afficher, le second est l'exception (throwable) dont stacktrace est connecté.

Une autre option est commons-logging, où il est le même:

log.error("Message", exception); 

Avec java.util.logging cela peut se faire via:

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

Toute installation standard pour simplement connecter le stacktra ce? Parfois, je ne sais pas (ou ne veux pas) quoi mettre dans le message –

3

Dans java.util.logging vous pouvez initialiser l'enregistreur avec formatter journal personnalisé comme ici:

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; 
    } 
Questions connexes