usa tutorial que puertos para español elastic java stack-trace

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.




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);