Optionales Drucken von Stack-Trace in Java

7

Ich erstelle eine Java-Anwendung, in der die Möglichkeit besteht, dass Ausnahmen ausgelöst werden. Ich behandle diese Ausnahmen in einem try-catch-Block und drucke entsprechende Nachrichten, so dass die Geschäftsbenutzer den hässlichen Stack-Trace im Falle eines Fehlers nicht sehen müssen.

Aber jetzt, wenn ich debugge, möchte ich die JAR-Datei in einer solchen Weise aufrufen, dass es die Stack-Traces für mich ausdrucken wird, so dass ich weiß, wo genau das Problem liegt.

Kann mir jemand erklären, wie dies erreicht werden kann?

    
aa8y 12.09.2012, 07:12
quelle

4 Antworten

13

Warum verwenden Sie keine Protokollierungsebenen?

DEBUG für Ihre technischen Fehler und INFO oder FEHLER mit den Geschäftscodes, die Ihre Nutzer verstehen.

    
Ajay George 12.09.2012, 07:14
quelle
19

Sie könnten slf4j als Fassade verwenden, um Implementierungen schnell ändern zu können und logback als die Implementierung für Ihre Protokollierung. Die Kombination von slf4j und logback ist derzeit ein sehr effizientes Protokollierungssystem. Für den Fall, dass Sie eine andere Implementierung wie Log4j, JDK 1.4 oder Jacarta Commons Logging verwenden möchten, können Sie einfach das Glas der Implementierung (Bindung) mit dem gewünschten ändern. Es folgt eine kurze Bedienungsanleitung zur Verwendung von slf4j mit Logback.

Einstellen Ihrer Umgebung

Als Erstes sollten Sie die notwendigen Gläser importieren, die für die Verwendung von slf4j benötigt werden.

Eclipse-Handbuch

  • Gehe in Eclipse zu deinem Projekt und klicke mit der rechten Maustaste darauf. Wählen Sie Eigenschaften .

  • Wählen Sie im linken Bereich Java-Erstellungspfad

  • aus
  • Wählen Sie den Tab Bibliotheken

  • aus
  • Klicken Sie auf Externe Jars hinzufügen

  • Suchen Sie Ihre extrahierten Ordner und fügen Sie logback-core-1.0.7.jar , logback-classic-1.0.7.jar von hinzu logback-1.0.7 und slf4j-api-1.7.0.jar im Ordner slf4j-1.7.0 . Klicken Sie auf OK, um zum Projekt zurückzukehren.

Netbeans-Leitfaden

  • Gehe zu deinem Projekt in Netbeans und klicke mit der rechten Maustaste darauf. Wählen Sie Eigenschaften .

  • Wählen Sie im linken Bereich Bibliotheken

  • aus
  • Wählen Sie die Registerkarte Kompilieren

  • aus
  • Klicken Sie auf Jar / Ordner hinzufügen

  • Suchen Sie Ihre extrahierten Ordner und fügen Sie logback-core-1.0.7.jar , logback-classic-1.0.7.jar von hinzu logback-1.0.7 und slf4j-api-1.7.0.jar im Ordner slf4j-1.7.0 . Klicken Sie auf OK, um zum Projekt zurückzukehren.

  

* Falls Sie keine der oben genannten Umgebungen verwenden, sollten Sie die obigen 3 Gläser manuell in Ihren Klassenpfad einfügen. Bei der Dependenz Ihres Betriebssystems ist eine andere Vorgehensweise zu beachten.

Verwenden des Protokollierungsframeworks

Zunächst sollten Sie die erforderlichen Abhängigkeiten importieren:

%Vor%

Jede Klasse, die Sie protokollieren möchten, sollte einen privaten Logger haben:

%Vor%

Indem Sie für jede Klasse einen separaten Logger haben, bieten Sie mehr Flexibilität und einfachere Änderung Ihrer Logging-Levels (WARN, ERROR, INFO, DEBUG).

Je nach dem Protokolllevel, das Sie verwenden möchten, sollten Sie

haben %Vor%

Es besteht auch die Möglichkeit, komplexere Methodenaufrufe zu verwenden, die von Ihren Anforderungen abhängen. Wenn Sie beispielsweise den StackTrace debuggen und anzeigen möchten, sollten Sie

verwenden %Vor%

Zum Beispiel:

%Vor%
  

* An dieser Stelle haben Sie ein einfaches Logging-System, ohne weitere Konfigurationen hinzuzufügen. Falls Sie eine erweiterte Konfiguration wünschen   lese die erweiterten Logbucheinstellungen, die ich unten gepostet habe.

Erweiterte Einstellungen des Logbacks

Um ein fortgeschritteneres Protokollierungssystem zu haben, sollten Sie eine zusätzliche Datei erstellen, die die gesamte Protokollierungskonfiguration enthält. In diesem Beispiel werde ich logback.xml verwenden. Weitere Informationen zu den verschiedenen Logbuchdateien finden Sie in der Logbackkonfiguration .

An diesem Punkt sollten Sie einen Ordner mit dem Namen resources erstellen und ihn im Buildpfad Ihres Projekts hinzufügen.

Eclipse-Handbuch

  • Erstellen Sie einen Ordner namens resources (Sie müssen den Ordner in Ihrem Projekt sehen)

  • Gehe in Eclipse zu deinem Projekt und klicke mit der rechten Maustaste darauf. Wählen Sie Eigenschaften .

  • Wählen Sie im linken Bereich Java-Erstellungspfad

  • aus
  • Wählen Sie die Registerkarte Quelle

  • aus
  • Klicken Sie auf Ordner hinzufügen

  • Markieren Sie den von Ihnen erstellten Ressourcenordner und klicken Sie auf OK. Klicken Sie auf OK, um zum Projekt zurückzukehren.

  • An dieser Stelle sollten Sie den Ressourcenordner als Paket sehen.

Netbeans-Leitfaden

  • Erstellen Sie einen Ordner namens resources (er ist in der Projektansicht noch nicht sichtbar. Nur in der Dateiansicht)

  • Gehe zu deinem Projekt in Netbeans und klicke mit der rechten Maustaste darauf. Wählen Sie Eigenschaften .

  • Wählen Sie im linken Bereich Quellen

  • Klicken Sie in den Quellpaketordnern auf Ordner hinzufügen .

  • Wählen Sie den Ordner Ressourcen und klicken Sie auf OK.

  • Sie sollten den erstellten Ordner als Paket sehen.

  

* Der Name des Ordners könnte ein beliebiger Name sein. Aus praktischen Gründen habe ich es als Ressourcen bezeichnet.

Folgendes gilt sowohl in Eclipse als auch in Netbeans.

  

* Falls Sie nicht die folgende Datei in Ihrem Klassenpfad haben, die bestimmte Einstellungen im Logging-Framework spezifiziert, wird die Root-Logger-Ebene automatisch in DEBUG zugewiesen. Das bedeutet, dass alle Protokollierungsstufen protokolliert werden. Debuggen ist die höhere Ebene.

  • Erstellen Sie einen Ordner mit dem Namen logback.xml, und legen Sie ihn im Ressourcenordner ab.
  • Platziere in logack.xml das folgende Tag.

    %Vor%

Die obige Konfiguration enthält zwei verschiedene Appender, einen in der Konsole und einen in einer Datei namens log.txt. Die Datei wird in einen Ordner namens log gestellt. Falls das Ordnerprotokoll nicht existiert, wird es automatisch erstellt.

Das Muster, das Sie verwenden werden, hängt von Ihnen ab und wie informativ Ihre Nachrichten sein werden. In der aktuellen Konfiguration ist der Konsolen-Appender weniger beschreibend und zeigt nur die Protokollierungsstufe und die Nachricht an, verglichen mit dem Datei-Appender, der die Protokollierungsstufe, den Thread-Namen, den Klassennamen, die Zeit und die Nachricht enthält. Der Wert append wird auf false gesetzt, um nach jedem Lauf Ihrer Anwendung eine neue Protokolldatei zu erstellen.

Die obige Konfiguration verwendet 2 verschiedene Logger für das gleiche Paket. Der erste Logger druckt nur die Info-Nachrichten in der Konsole und der zweite Logger druckt die Debug-Meldungen in eine Datei. Dies wird erreicht, indem der Filter verwendet wird, der in den Appendern platziert ist.

  

* Im Logger-Namen können Sie den vollständig qualifizierten Namen Ihrer Klasse oder den Paketnamen angeben. In diesem Fall habe ich die Paketstruktur angenommen   org.test und platzierte die Klasse in diesem Paket. Wenn du das hast   vollqualifizierter Name der Klasse, die die Protokollierungskonfiguration sein wird   nur für diese Klasse angewendet. Wenn Sie den Paketnamen verwenden, werden alle   Klassen innerhalb dieses Pakets werden dem oben genannten folgen   Konfiguration.

Es gibt viele verschiedene Möglichkeiten, die Appender und Logger zu verwenden, und es hängt von Ihren Bedürfnissen und der Komplexität Ihres Programms ab. Je nach der Situation, die Sie beschrieben haben, glaube ich, dass die obige Lösung Ihre Bedürfnisse erfüllen könnte.

P.S. Weitere Beschreibungen und weiterführende Konfigurationen finden Sie im Logbuch-Handbuch

    
Konstantinos Margaritis 12.09.2012 13:28
quelle
1

solche Dinge werden normalerweise mit Loggern und verschiedenen Loglevels behandelt.

Sie haben in der Regel 3 Protokollebenen, allgemeine Protokolle, Warnungen und Fehler. Wenn Sie ausgeben, entscheiden Sie, auf welcher Ebene eine Nachricht steht

Wenn Sie Ihre Anwendung starten, sagen Sie Ihrem Logger, welche Stufe er anzeigen soll. Für Ihre Benutzer wird dies FEHLER sein, nur die schlimmsten Dinge sollten sichtbar sein, für Sie würden Sie alles ausgeben

    
Peter 12.09.2012 07:18
quelle
-3

Erstellen Sie zwei Klassen mit demselben Paket / Namen an zwei verschiedenen Orten

%Vor%

und

%Vor%

Wenn Sie Ihr Java-Programm kompilieren, fügen Sie nur einen dieser Pfade in Ihren Quellpfad ein

    
Pierre 12.09.2012 07:20
quelle

Tags und Links