2009-07-17 7 views
8

Bei einer unserer Kundeninstallationen hatten wir Tausende von Vorfällen der gleichen Ausnahme. Nach vielen gut protokollierten Stacktraces (9332) wird das Auftreten der Exception noch protokolliert, jedoch ohne Stacktrace. Nach dem Neustart des Java-Prozesses, das gleiche: Diesmal hatten wir 17858 Stacktraces und dann nur die Ausnahme auftreten.Warum deaktiviert Log4j Stack-Trace nach (vielen) Wiederholung der gleichen Ausnahme?

Es gibt eine ähnliche Frage ist here, aber keine Antwort ...

Ist es ein log4j Feature oder Bug? (Ich glaube an die ehemalige, weil ich wirklich mag, was diese Apache Jungs tun)

Irgendwelche Ideen?

Antwort

21

Verwenden Sie Java 5 oder besser?

Sie sehen dann:

Der Compiler in dem Server jetzt VM richtig Stapel Backtraces für alle „kalt“ eingebauten Ausnahmen vorsieht. Wenn eine solche Ausnahme einige Male ausgelöst wird, kann die Methode zu Leistungszwecken neu kompiliert werden. Nach der Neukompilierung kann der Compiler eine schnellere Taktik auswählen, indem er zuvor zugeordnete Ausnahmen verwendet, die keine Stack-Trace bereitstellen. vollständig die Verwendung von vorreservierten Ausnahmen zu deaktivieren, verwenden Sie diese neue Flagge: -XX:-OmitStackTraceInFastThrow

Mit freundlicher Genehmigung der Java 5 release notes.

+0

Danke. Das hört sich nach der richtigen Antwort an und ich werde das überprüfen und dann als das Richtige akzeptieren. –

+0

Die Versionshinweise sind nicht mehr zugänglich. Die letzte archivierte Erfassung, die ich gefunden habe, stammt vom [2012-06-27] (http://www.archive.org/web/20120627040457/http://java.sun.com/j2se /1.5.0/relnotes.html). Obwohl ich die ursprüngliche Quelle überprüfen wollte, ist das Zitat des zugehörigen Artikels vollständig. – vilpan

1

Klingt wie ein Feature für mich, zumindest wenn die Stack-Spuren wirklich identisch sind. Warum möchten Sie Ihre Logs vergrößern (und somit schwerer zu durchsuchen), ohne weitere Informationen zu erhalten? Wird auf Konfigurierbarkeit dieser Funktion prüfen ...

EDIT: Ich habe einen Blick durch den log4j Code und es gibt keine Spur davon. Dies würde stark darauf hinweisen, dass Roberts Antwort richtig ist. Nice VM Feature IMO :)

+0

Danke für die Antwort. Ich möchte meine Log-Dateien nicht zu groß machen (und ich mag die Funktion - auch wenn es ein Bug ist ...). Das Problem war, dass ich zuerst diese Log-Einträge ohne Stack-Trace gesehen habe (und nicht einmal gedacht habe, dass es andere geben könnte), was nicht sehr hilfreich war, als ich versuchte, den Bug in meinem Code zu finden. –