2010-02-25 11 views
13

¿Hay un registrador que registrará fácilmente mi stacktrace (lo que obtengo con ex.printStackTrace())? He buscado en los documentos log4j y no encontré nada sobre el registro de stacktrace.Java - Necesita un paquete de registro que registrará el stacktrace

que puedo hacer esto mismo con

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

pero no quiero duplicar este código por todo el lugar.

Si log4j no hace esto por mí ¿hay otro paquete de registro que registre la pila de registro para mí?

Gracias.

Respuesta

32

Usando log4j esto se hace con:

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

El primer argumento es un mensaje que se mostrará, el segundo es la excepción (lanzable) cuya StackTrace se registra.

Otra opción es commons-logging, donde es el mismo:

log.error("Message", exception); 

Con java.util.logging esto se puede hacer a través de:

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

Cualquier instalación estándar para simplemente registrar la pila ce? A veces simplemente no sé (o quiero) qué poner en el mensaje –

3

En java.util.logging puede inicializar el registrador con el formateador de registro personalizado como aquí:

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; 
    } 
Cuestiones relacionadas