java - tutorial - ¿Cómo se escribe una traza de pila completa en el registro?
para que se usa elasticsearch (7)
Estaba detectando una excepción e intentando escribir el seguimiento de la pila en los registros de esta manera:
log.warn(e.getMessage());
Pero todo lo que dijo fue
null
Así que lo cambié a
log.warn(e.toString());
Y ahora solo dice
java.lang.NullPointerException
¿Cómo escribo el seguimiento de la pila completa en el registro para ver dónde se genera esta excepción en la aplicación?
En su método de excepción, la String
subyacente que contiene el mensaje es null
.
La respuesta anterior, ahora tachada, todavía se mantiene, excepto que e
no es nula, pero la variable de instancia privada detailMessage
en la clase Throwable
es nula, por lo que e.getMessage()
es la cadena null
, pero e.toString()
(que llama a un null detailMessage.toString
subyacente) lanza una NullPointerException
.
Generalmente:
log.warn("message", e);
Pero depende de su marco de registro también.
Puedes usar
logger.log(Level.WARN, "logged exception", ex);
o
logger.warn("logged exception", ex);
Recursos:
Quizás esté buscando algo como esto: http://www.javapractices.com/topic/TopicAction.do?Id=78
Si está utilizando una versión de Java anterior a 8, puede intentar esto:
LOGGER.error("Error al recuperar proveedores de la base de datos: " +
e + Arrays.asList(e.getStackTrace()).stream().map(new Function(){
@Override
public Object apply(Object t) {
return t.toString();
}
}).collect(Collectors.joining("/n")));
Si usas java8 puedes hacer lo siguiente:
LOGGER.error("Caught exception while methodX. Please investigate: "
+ exception
+ Arrays.asList(exception.getStackTrace())
.stream()
.map(Objects::toString)
.collect(Collectors.joining("/n"))
);
Usando log4j esto se hace con:
logger.error("An error occurred", exception);
El primer argumento es un mensaje que se muestra, el segundo es la excepción (lanzable) cuyo seguimiento de pila se registra.
Otra opción es el registro de los comunes, 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);