2010-09-15 16 views
12

byłem połowu wyjątek i próbuje pisać ślad stosu do dzienników takiego:W jaki sposób zapisać pełną historię stosu do dziennika?

log.warn(e.getMessage()); 

Ale wszystko to powiedział był

null 

Więc zmieniłem go

log.warn(e.toString()); 

A teraz mówi tylko

java.lang.NullPointerException 

Jak napisać pełną historię stosu do dziennika, aby zobaczyć, gdzie generowany jest wyjątek w aplikacji?

Odpowiedz

28

Zazwyczaj:

log.warn("message", e); 

Ale to zależy od ram rejestrowania zbyt.

3

W swojej metodzie wyjątku bazowego String który zawiera komunikat jest null.

Powyższa odpowiedź, teraz uderzyła, nadal posiada, oprócz tego, że e nie jest zerowa, ale detailMessage prywatny instancja zmiennej w klasie Throwable jest zerowy, dlatego e.getMessage() jest String null, ale e.toString() (których połączenia bazowego nulldetailMessage.toString) wyrzuca NullPointerException.

+1

jeśli e była zerowa, zalogować. warn (e.getMessage()); rzuciłby wyjątek i nie wydrukowałby "null". –

+0

Nie, nie, wyrzuciłbym NPE –

+0

Niestety, źle odczytałem twój komentarz. –

1

Korzystanie log4j odbywa się to z:

logger.error ("Wystąpił błąd", wyjątek); Pierwszy argument to komunikat do wyświetlenia, drugi to wyjątek (throwable), którego zapis stosu jest rejestrowany.

Inną opcją jest commons-logging, gdzie to samo:

log.error ("Message", wyjątek);

Z java.util.logging można to zrobić poprzez:

logger.log (Level.POWAŻNE, "Wiadomość", wyjątek);

1

Jeśli używasz java8 można wykonać następujące czynności:

 LOGGER.error("Caught exception while methodX. Please investigate: " 
       + exception 
       + Arrays.asList(exception.getStackTrace()) 
       .stream() 
       .map(Objects::toString) 
       .collect(Collectors.joining("\n")) 
     ); 
+0

Działa dobrze, a przydaje się również podczas sesji debugowania, gdy wyjątki nie są poprawnie rejestrowane. – alexandrul

0

Jeśli używasz wersji Java poprzedni do 8, można spróbować to:

  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"))); 
Powiązane problemy