905 Stimmen

Wann die verschiedenen Protokollebenen zu verwenden sind

Es gibt verschiedene Möglichkeiten, Meldungen zu protokollieren, und zwar in der Reihenfolge ihres Auftretens:

  1. FATAL

  2. ERROR

  3. WARN

  4. INFO

  5. DEBUG

  6. TRACE

Wie entscheide ich, wann ich was verwende?

Was ist eine gute Heuristik, die man verwenden kann?

22 Stimmen

Ziemlich weit gefasste Frage. Daher ist mehr als eine Antwort möglich, je nach den tatsächlichen Umständen der Erfassung. Jemand wird vermissen notice in dieser Sammlung wird jemand nicht ...

3 Stimmen

@Wolf, wo würde "notice" in dieser Hierarchie stehen? Nur fürs Protokoll...

3 Stimmen

notice kann durchaus fehlen, da einige beliebte Protokollierungsdienste wie log4j sie nicht verwenden.

3voto

dicroce Punkte 43066

Ich habe Warnungen immer als die erste Protokollebene angesehen, die mit Sicherheit bedeutet, dass ein Problem vorliegt (z. B. dass eine Konfigurationsdatei nicht dort ist, wo sie sein sollte, und wir mit den Standardeinstellungen arbeiten müssen). Ein Fehler bedeutet für mich, dass das Hauptziel der Software nicht mehr erreicht werden kann und wir versuchen, das Programm sauber zu beenden.

3voto

Lasse V. Karlsen Punkte 364542

Ein Fehler ist etwas, das falsch ist, einfach falsch, es führt kein Weg daran vorbei, es muss behoben werden.

Eine Warnung ist ein Zeichen für ein Muster, das puede falsch sein, aber vielleicht auch nicht.

Allerdings fällt mir kein gutes Beispiel für eine Warnung ein, die nicht auch ein Fehler ist. Was ich damit meine, ist, dass man, wenn man sich die Mühe macht, eine Warnung zu protokollieren, auch das zugrunde liegende Problem beheben könnte.

Allerdings könnten Dinge wie "Sql-Ausführung dauert zu lange" eine Warnung sein, während "Sql-Ausführung blockiert" ein Fehler ist, also gibt es vielleicht doch einige Fälle.

2 Stimmen

Ein gutes Beispiel für eine Warnung ist, dass in MySQL standardmäßig, wenn Sie versuchen, mehr Zeichen in eine varchar als er definiert ist, warnt er Sie, dass der Wert abgeschnitten wurde, fügt ihn aber trotzdem ein. Aber was für den einen eine Warnung ist, kann für den anderen ein Fehler sein: In meinem Fall ist dies ein Fehler; es bedeutet, dass ich einen Fehler in meinem Validierungscode gemacht habe, indem ich eine Länge definiert habe, die nicht mit der Datenbank übereinstimmt. Und es würde mich nicht sonderlich überraschen, wenn eine andere DB-Engine dies als Fehler ansehen würde, und ich hätte kein wirkliches Recht, empört zu sein, denn schließlich ist es ein Fehler.

0 Stimmen

Auch ich würde das für einen Fehler halten. In einigen Fällen ist der Inhalt "Text" (nicht im Sinne des Datentyps), was bedeutet, dass vielleicht ist es in Ordnung, sie abzuschneiden. In einem anderen Fall handelt es sich um einen Code, bei dem das Abschneiden von Bits ihn beschädigt oder seine Bedeutung verändert, was nicht in Ordnung ist. Meiner Meinung nach ist es nicht Aufgabe der Software, zu erraten, was ich gemeint habe. Wenn ich versuche, eine Zeichenkette mit 200 Zeichen in eine Spalte zu zwingen, die nur 150 Zeichen aufnehmen kann, ist das ein Problem, über das ich gerne Bescheid wüsste. Mir gefällt jedoch die Unterscheidung, die andere hier gemacht haben: Wenn man es wiederherstellen kann, ist es eine Warnung, aber dann... muss man es protokollieren?

0 Stimmen

Ein Beispiel, das mir einfällt: Die Verarbeitung einer Nachricht dauert erstaunlicherweise länger als gewöhnlich. Das könnte ein Hinweis darauf sein, dass etwas nicht in Ordnung ist (vielleicht ist ein anderes System überlastet oder eine externe Ressource ist vorübergehend ausgefallen).

2voto

Übrigens bin ich ein großer Fan davon, alles zu erfassen und die Informationen später zu filtern.

Was würde passieren, wenn Sie auf der Ebene "Warnung" erfassen und einige Debug-Informationen im Zusammenhang mit der Warnung wünschen, aber die Warnung nicht neu erstellen können?

Erfassen Sie alles und später filtern!

Dies gilt sogar für eingebettete Software, es sei denn, Sie stellen fest, dass Ihr Prozessor nicht mithalten kann. In diesem Fall sollten Sie Ihre Ablaufverfolgung neu entwerfen, um sie effizienter zu gestalten, oder die Ablaufverfolgung beeinträchtigt das Timing (Sie puede Sie sollten das Debugging auf einem leistungsfähigeren Prozessor in Betracht ziehen, aber das ist ein ganz anderes Thema).

Erfassen Sie alles und später filtern!!

(btw, Capture Everything ist auch deshalb gut, weil man damit Tools entwickeln kann, die mehr können als nur Debug-Traces zu zeigen (ich zeichne Message Sequence Charts aus meinen, und Histogramme der Speichernutzung. Es gibt Ihnen auch eine Grundlage für den Vergleich, wenn etwas schief geht in der Zukunft (halten Sie alle Protokolle, ob bestanden oder nicht, und achten Sie darauf, Build-Nummer in der Protokolldatei enthalten).

1voto

Brian Agnew Punkte 260470

Ich habe bereits Systeme gebaut, die Folgendes verwenden:

  1. ERROR - bedeutet, dass etwas ernsthaft schief läuft und der betreffende Thread/Prozess/Sequenz nicht fortgesetzt werden kann. Ein Eingreifen des Benutzers/Administrators ist erforderlich
  2. WARNUNG - irgendetwas stimmt nicht, aber der Prozess kann weitergehen (z.B. ein Auftrag von 100 ist fehlgeschlagen, aber die restlichen können weiterverarbeitet werden)

Bei den Systemen, die ich aufgebaut habe, waren die Administratoren angewiesen, auf FEHLER zu reagieren. Andererseits haben wir auf WARNUNGEN geachtet und für jeden Fall bestimmt, ob Systemänderungen, Neukonfigurationen usw. erforderlich waren.

-2voto

Dinesh Kumar Punkte 2415

Ich schlage vor, nur drei Stufen zu verwenden

  1. Fatal - Das würde die Anwendung zerstören.
  2. Infos - Infos
  3. Debug - Weniger wichtige Informationen

1 Stimmen

Das ist einfach für den Entwickler, aber lästig für den Betrieb.

0 Stimmen

@Natacha es ist tatsächlich vereinfacht

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X