Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:modul:ffit:3-jahr:java:learningunits:lu03:b [2025/09/01 14:27] apeterde:modul:ffit:3-jahr:java:learningunits:lu03:b [2025/09/01 21:07] (aktuell) apeter
Zeile 21: Zeile 21:
 Ebenfalls kann dort ausgewählt werden, ob die Konsole (''ch.qos.logback.core.ConsoleAppender'') oder ein Log-File (''ch.qos.logback.core.rolling.RollingFileAppender'') benutzt werden soll. Ebenfalls kann dort ausgewählt werden, ob die Konsole (''ch.qos.logback.core.ConsoleAppender'') oder ein Log-File (''ch.qos.logback.core.rolling.RollingFileAppender'') benutzt werden soll.
  
-Die Änderungen sind im Commit ''TODO'' enthalten.+Die Änderungen sind im Commit ''6df4111'' enthalten.
  
 ==== LogLevel ==== ==== LogLevel ====
Zeile 27: Zeile 27:
 Anschliessend können sämtliche Klassen, in denen Logging eingesetzt werden soll mit einer ''Logger''-Objekt ausgestattet werden. Heutzutage wird oft ''log'' als Name gewählt, obwohl dieser von der Namenskonvention für Konstanten abweicht. Hauptsache die Benennung ist innerhalb des Projekts einheitlich. Anschliessend können sämtliche Klassen, in denen Logging eingesetzt werden soll mit einer ''Logger''-Objekt ausgestattet werden. Heutzutage wird oft ''log'' als Name gewählt, obwohl dieser von der Namenskonvention für Konstanten abweicht. Hauptsache die Benennung ist innerhalb des Projekts einheitlich.
  
-^Vorher ^Nachher |+^ Vorher ^ Nachher ^
 | <WRAP> | <WRAP>
 <code java> <code java>
Zeile 59: Zeile 59:
  
 ^ Level  ^ Beschreibung ^ Beispiel ^ ^ Level  ^ Beschreibung ^ Beispiel ^
-| <color #00a2e8>DEBUG</color> | Für Entwickler interessant, nicht für den Betrieb (interne Details, Diagnose, Ablaufverfolgung). | SQL-Statement, Aufruf-Parameter, Zwischenergebnisse | +''<color #b200ed>DEBUG</color>'' | Für Entwickler interessant, nicht für den Betrieb (interne Details, Diagnose, Ablaufverfolgung). | SQL-Statement, Aufruf-Parameter, Zwischenergebnisse | 
-| <color #c3c3c3>INFO</color> | Normale, erwartete Ereignisse, die den regulären Ablauf dokumentieren. | Anwendung gestartet, Benutzer hat sich angemeldet, erfolgreicher DB-Aufruf | +''<color #00a2e8>INFO</color>'' | Normale, erwartete Ereignisse, die den regulären Ablauf dokumentieren. | Anwendung gestartet, Benutzer hat sich angemeldet, erfolgreicher DB-Aufruf | 
-| <color #ff7f27>WARN  </color> | Unerwartete, aber tolerierbare Situation; Anwendung läuft weiter, sollte jedoch geprüft werden. | Ungültige Benutzereingabe, deprecated API verwendet, langsame Antwortzeit | +''<color #ff7f27>WARN</color>'' | Unerwartete, aber tolerierbare Situation; Anwendung läuft weiter, sollte jedoch geprüft werden. | Ungültige Daten, deprecated API, aussergewöhnlich langsame Antwortzeit | 
-| <color #ed1c24>ERROR </color> | Schwerwiegender Fehler, der Funktionalität einschränkt oder nicht kompensiert werden kann. | Datenbank nicht erreichbar, IOException beim Schreiben einer Datei, Transaktion fehlgeschlagen |+''<color #ed1c24>ERROR</color>'' | Schwerwiegender Fehler, der Funktionalität einschränkt oder nicht kompensiert werden kann. | Datenbank nicht erreichbar, IOException beim Schreiben einer (wichtigen) Datei, Transaktion fehlgeschlagen |
  
 Die Wahl des richtigen Loglevels ist essentiell, um bei grösseren Applikationen den Überblick zu behalten.  Die Wahl des richtigen Loglevels ist essentiell, um bei grösseren Applikationen den Überblick zu behalten. 
  
-Grundsätzlich gilt: Eine Exception ist mindestens Stufe WARN, denn sie sollten im Normalfall nicht auftauchen. Bei ''.error(...)'' und '.warn(...)' kann daher auch ein Stacktrace (''Throwable'') mitgegeben werden. +Grundsätzlich gilt: Eine Exception ist mindestens Stufe WARN, denn Exceptions sollten im Normalfall nicht auftauchen. Bei ''.error(...)'' und ''.warn(...)'' kann daher auch ein Stacktrace (''Throwable'') mitgegeben werden. 
 Wenn man eine Exception "wrapped" und weiterwirft (z.B. ''NumberFormatException'' in eine ''IllegalArgumentException''), dann kann das Ereignis zwar geloggt werden, aber der StackTrace sollte nur einmal (beim endgültigen Fangen) ausgegeben werden. Wenn man eine Exception "wrapped" und weiterwirft (z.B. ''NumberFormatException'' in eine ''IllegalArgumentException''), dann kann das Ereignis zwar geloggt werden, aber der StackTrace sollte nur einmal (beim endgültigen Fangen) ausgegeben werden.
  
 Jedes ''catch''-Statement sollte den Fehler loggen oder ''wrapped'' weiterwerfen. Überprüfen Sie all Ihre ''catch''-Statements und bauen Sie entsprechende Log-Aufrufe ein. Jedes ''catch''-Statement sollte den Fehler loggen oder ''wrapped'' weiterwerfen. Überprüfen Sie all Ihre ''catch''-Statements und bauen Sie entsprechende Log-Aufrufe ein.
 +
 +==== Robuste Applikationen ====
 +
 +Applikationen sollten nicht aufgrund kleinen Fehler abstürzen. Machen Sie sich daher beim Programmieren stets Gedanken über mögliche Fehler und das entsprechende Verhalten Ihrer Applikation.
 +
 +**Change request 2.1**: Damit ''listBooks'' nicht immer alle Bücher ausgibt, soll optional ein Limit mitgegeben werden können. ''listBooks 10'' soll also maximal die ersten 10 Bücher zurückliefern.
 +Wird bei dieser Änderung nicht eine Zahl, sondern ein anderer String eingegeben, soll der Vorfall geloggt werden, aber die Applikation soll weiterlaufen.
 +
 +Auch bei ''importBooks'' soll, sofern keine Importdatei gefunden werden kann, die Applikation weiterlaufen und ein entsprechender Log-Eintrag gemacht werden.
 +
 +Überprüfen Sie Ihre Änderungen mit dem Commit ''31d6f95''.
 +
  • de/modul/ffit/3-jahr/java/learningunits/lu03/b.1756729651.txt.gz
  • Zuletzt geändert: 2025/09/01 14:27
  • von apeter