2013-04-04 14 views
14

Mam sytuację, w której chcę wydrukować cały wyjątek złapany w blok catch przy użyciu rejestratora.jak wydrukować wyjątek przy użyciu rejestratora?

try { 
     File file = new File("C:\\className").mkdir(); 
     fh = new FileHandler("C:\\className\\className.log"); 
     logger.addHandler(fh); 
     logger.setUseParentHandlers(false); 
     SimpleFormatter formatter = new SimpleFormatter(); 
     fh.setFormatter(formatter); 
    } catch (Exception e) { 
     logger.info(e); 
    } 

mam rejestrator błąd nie może być stosowana do java.io.Exception...

Obawiam się, czy zrobić tak wiele rzeczy w bloku try i zachować tylko jeden blok catch jako catch (Exception e), to jest tam w jakiś sposób przy użyciu rejestratora, który drukuje każdy wyjątek złapany w blok catch? Uwaga: używamy java.util.logging.Logger API

Prosimy kierować mi ... Z góry dzięki

+0

http://stackoverflow.com/a/1149718/112500 – Shashi

+0

Możliwe duplikaty http://stackoverflow.com/questions/1149703/stacktrace-to-string-in-java – Shashi

+0

Ogólnie nazwa pliku dziennika, format itp. Pozostały poza kodem, aby można go było modyfikować podczas produkcji. – Jayan

Odpowiedz

23

Powinieneś prawdopodobnie wyjaśnić, jakiego loggera używasz.

org.apache.commons.logging.Log interfejs ma metodę void error(Object message, Throwable t) (i metody void info(Object message, Throwable t)), który rejestruje ślad stosu wraz z niestandardowego komunikatu. Implementacja Log4J również ma tę metodę.

więc prawdopodobnie trzeba napisać:

logger.error("BOOM!", e); 

Jeśli musisz zalogować się z poziomu INFO (choć może to być dziwny przypadek użycia), a następnie:

logger.info("Just a stack trace, nothing to worry about", e); 

Nadzieja to pomaga.

+0

@Kadelakig przepraszam, używamy java.util.looging API – Pankaj

+4

Och, widzę. Wydaje się, że istnieje również nieco podobna funkcjonalność: 'java.util.logging.Logger.getLogger (" Test ") .log (Level.INFO," BOOM! ", E);' <- to działało dla mnie. –

+0

Tak, to pomaga, czego szukałem. – spandey15

0

Można użyć tej metody, aby zalogować się do stosu wyjątku String

public String stackTraceToString(Throwable e) { 
    StringBuilder sb = new StringBuilder(); 
    for (StackTraceElement element : e.getStackTrace()) { 
     sb.append(element.toString()); 
     sb.append("\n"); 
    } 
    return sb.toString(); 
} 
0

Spróbuj zarejestrować ślad stosu, jak poniżej:

logger.error("Exception :: " , e); 
+0

próbowałem tego, ale wystąpił błąd Nie znaleziono symbolu symbolu: błąd metody (java.lang.String, java.io.IOException) lokalizacja: klasa java.util.logging.Logger logger.error ("Exception ::", mi); – Pankaj

+0

@Pankaj Nie używasz Log4j do rejestrowania. Metoda jest obecna w 'org.apache.log4j.Logger' –

4

Zastosowanie: LOGGER.log(Level.INFO, "Got an exception.", e);
lub LOGGER.info("Got an exception. " + e.getMessage());

+1

Jeśli wyjątek jest nieoczekiwany, zalecam użycie poziomu logarytmicznego OSTRZEŻENIE dla komunikatu dziennika – SimY4

+0

Tak, dla nieoczekiwanych wyjątków, które prawdopodobnie byłyby prawdziwe. Odpowiadałem jednak na pytanie, w którym pytający korzystał z poziomu dziennika informacji, aby się zalogować, a zatem mój przykład wykorzystał informacje. – user3094526

Powiązane problemy