Jestem bardzo nowy w log4j. Nie chcę, aby pokazać ślad stosu wyjątku w moim pliku dziennika, takich jakKonwertuj plik e.printStackTrace(), aby używał log4j zamiast:
java.lang.IllegalArgumentException: nodeRef is a mandatory parameter
at org.alfresco.util.ParameterCheck.mandatory(ParameterCheck.java:42)
Wyjątki te są zapisywane bezpośrednio do konsoli za pomocą e.printStackTrace()
jak ten
try {
// something
} catch(Exception e) {
StringWriter stack = new StringWriter();
e.printStackTrace(new PrintWriter(stack));
logger.debug("Caught exception; decorating with appropriate status template : " + stack.toString());
}
Jestem teraz dostosowywania Open Source projekt, nie pisząc wszystkich moich programów samodzielnie. Tak więc niemożliwe jest usunięcie e.printStackTrace();
we wszystkich plikach Java.
O ile mi wiadomo, dziennik drukowany przez log4j
z rejestratorem może być skonfigurowany przy użyciu poziomu błędu log4j, takiego jak info, debug, warn. Ale jak pisać bezpośrednio do konsoli lub pliku?
Jak mogę skonfigurować log4j tak, aby nie wyświetlał tylko stosu stacków wyjątków, ale pokazywał inne informacje? Czy istnieje sposób, aby to rozwiązać?
Najpierw trzeba ** użyć ** log4j. Oświadczenie połowowe, które pokazujesz a) nie używa log4j; b) nawet niczego nie drukuje. Po prostu wypełnia StringWriter plikiem stacktrace. –
Zmieniłem kod. Moja próbka używa zarówno e.printStackTrace() i logger.debug(). To nie jest napisane przeze mnie. Mój projekt używa tego pliku jar, którego dołączone źródło jest pokazane w ten sposób. – swemon
Co mogę zrobić, to stworzyć PrintStream, aby zastąpić System.err, który zapisuje wszystko, co robi log4j. W ten sposób możesz użyć System.out lub System.err w dowolny sposób i faktycznie używa log4j. ;) –