Supongamos que detecta una excepción y obtiene lo siguiente en la salida estándar (como, por ejemplo, la consola) si realiza un e.printStackTrace () :
java.io.FileNotFoundException: so.txt
at java.io.FileInputStream.<init>(FileInputStream.java)
at ExTest.readMyFile(ExTest.java:19)
at ExTest.main(ExTest.java:7)
Ahora quiero enviar esto a un registrador como, por ejemplo, log4j para obtener lo siguiente:
31947 [AWT-EventQueue-0] ERROR Java.io.FileNotFoundException: so.txt
32204 [AWT-EventQueue-0] ERROR at java.io.FileInputStream.<init>(FileInputStream.java)
32235 [AWT-EventQueue-0] ERROR at ExTest.readMyFile(ExTest.java:19)
32370 [AWT-EventQueue-0] ERROR at ExTest.main(ExTest.java:7)
¿Cómo puedo hacer esto?
try {
...
} catch (Exception e) {
final String s;
... // <-- What goes here?
log.error( s );
}
java
logging
log4j
stack-trace
Sintaxis T3rr0r
fuente
fuente
log.error(e.getLocalizedMessage(), e)
que es totalmente redundante. ¿Maneja un nulo para el primer argumento?log4j-1.2.8.jar
y quería imprimir todostackTrace
en mi archivo de registro, así que intenté como mencioné anteriormente, pero solo imprimo en mi archivo de registronullPointerException
. Fui utilizado en mi códigoe.printStackTrace()
, imprime todo rastro. ¿Por qué este Kolavery?Si desea registrar un seguimiento de pila sin involucrar una excepción, simplemente haga esto:
fuente
También puede obtener el seguimiento de la pila como una cadena a través de
ExceptionUtils.getStackTrace
.Ver: ExceptionUtils.java
Lo uso solo para
log.debug
, para serlog.error
simple.fuente
Solo porque me pasó y puede ser útil. Si haces esto
obtendrá el encabezado de la excepción y no todo el seguimiento de la pila. Porque el registrador pensará que estás pasando una cadena. Hazlo sin
{}
como dijo skaffmanfuente
Throwable.toString()
no devuelve un seguimiento de pila. (Suponiendo que está usando un registrador que sabe qué hacer para con '{}'.)La respuesta de skaffman es definitivamente la respuesta correcta. Todos los métodos logger tales como
error()
,warn()
,info()
,debug()
toman Throwable como un segundo parámetro:Sin embargo, también puede extraer stacktrace como String. A veces puede ser útil si usted desea tomar ventaja de función usando el formato "{}" marcador de posición - ver método
void info(String var1, Object... var2);
En este caso, supongamos que tiene un StackTrace como secuencia, a continuación, en realidad se puede hacer algo como esto:Esto imprimirá el mensaje parametrizado y el stacktrace al final de la misma manera que lo hace para el método:
logger.error("error: ", e);
De hecho, escribí una biblioteca de código abierto que tiene una Utilidad para la extracción de un stacktrace como String con una opción para filtrar de forma inteligente algo de ruido fuera del stacktrace. Es decir, si especifica el prefijo del paquete que le interesa, su seguimiento de pila extraído se filtraría de algunas partes irrelevantes y le dejaría información muy detallada. Aquí está el enlace al artículo que explica qué utilidades tiene la biblioteca y dónde obtenerla (tanto como artefactos expertos y fuentes git) y cómo usarla también. Biblioteca Java de código abierto con filtrado de seguimiento de pila, análisis de cadena silenciosa, convertidor Unicode y comparación de versiones Consulte el párrafo " Filtro de ruido de seguimiento de pila "
fuente
Es posible que esta respuesta no esté relacionada con la pregunta formulada, sino con el título de la pregunta.
O
O
fuente
En Log4j 2, puede usar Logger.catching () para registrar un seguimiento de pila de una excepción que se detectó.
fuente
esto sería bueno log4j error / registro de excepciones - legible por splunk / otro registro / monitoreo s / w. todo es forma de par clave-valor. log4j obtendría el seguimiento de la pila de Exception obj
e
fuente
fuente
Puede usar el siguiente código:
Aquí puedes llamar:
LogWriterUtility.errorWithAnalysis( YOUR_EXCEPTION_INSTANCE);
Imprimirá stackTrace en su registro.
fuente
Crea esto
class
:Llama a esto en tu código
fuente