Ich bin neu in der Programmierung von Vala und habe Erfahrungen mit Java und .NET, aber ich konnte nichts finden, was nützlich ist, um mit Vala zu loggen. Gibt es irgendwelche nützlichen Protokollierungsmöglichkeiten wie log4j oder log4net oder wie ist die vorgeschlagene Methode, um sich in Vala einzuloggen, indem man in verschiedene Protokollierungsstufen wie Fehler, Warnung, Debug und Trace skaliert? Und was ist mit defensiver Programmierung wie Behauptungen und Verträgen? Gibt es irgendwelche oder was ist der empfohlene Weg, defensive Programmierung zu machen und die meisten nützlichen Logs mit Stack-Spuren und genauer Ursache zu bekommen? Danke für einen Hinweis.
Protokollierung
Vala hat einige ziemlich robuste Protokollierungsfunktionen eingebaut. Sie können debug()
, message()
, warning()
, error()
und critical()
als Abkürzungen für das etwas komplexere log()
Funktion. Alle sind in der Basis enthalten (automatisch enthalten) GLib
namespace .
Wenn Sie die Protokollausgabe umleiten oder verschiedene Arten von Nachrichten an verschiedene Ziele senden möchten, finden Sie alles in GLib.Log
Namensraum . Vielleicht möchten Sie die glib-Dokumentation zum Logging lesen, um zu erfahren, was hinter den Kulissen passiert .
Defensive Programmierung
Vala beinhaltet auch Unterstützung für Behauptungen und Verträge. Die Kurzversion: assert()
und assert_not_reached()
für Assertions und requires()
und ensures()
in Methodensignaturen für Verträge. Weitere Informationen finden Sie im Abschnitt " Zusicherungen und Vertragsprogrammierung .
Fehlerbehandlung
Die Fehlerbehandlung von Vala ist etwas seltsam: ähnlich wie Ausnahmen aussehen, aber nicht ganz gleich. Der Tutorial-Abschnitt zu Fehlerbehandlung deckt die Grundlagen ziemlich gut ab, und es könnte auch hilfreich sein, glib docs on errors , um ein besseres Verständnis dafür zu bekommen, was hinter den Kulissen passiert. Soweit ich weiß, gibt es keine Möglichkeit, einen Stack-Trace von Vala-Fehlern zu bekommen - nur ein Typ und eine Nachricht.
Best Practices
Im Hinblick auf Best Practices denke ich, dass Vala mit Java oder C # vergleichbar genug ist, dass die Praktiken, die Sie bereits kennen, allgemein angewendet werden können. Ich schlage vor, mit diesen Funktionen herumzuspielen, um ein Gefühl dafür zu bekommen, wie die Details in Vala aussehen. Viel Glück!
Als Ergänzung zur großartigen Antwort von @chazomaticus können Sie Stacktrace von Vala abrufen, indem Sie den Aufrufstapel auflösen.
Es ist nur, dass dies nicht in die Vala-Sprache eingebacken ist.
Ich habe zufällig eine solche Bibliothek geschrieben: ivy
Ich möchte 2 Dinge zu @chazomaticus hinzufügen:
Warum kann ich keine Debug / Log-Ausgaben sehen?
Sie müssen die Umgebungsvariable G_MESSAGES_DEBUG
auf all
setzen. Das wird auch in der Dokumentation erwähnt, aber nicht weiter erläutert. Z.B. für debuggen :
Wenn Sie die Ausgabe weiter einschränken möchten, Sie können error
, warning
, critical
, message
, info
, debug
und help
anstelle von all
verwenden.
Wo finde ich die Dokumentation für jede Logging-Funktion?
Weiterführende Literatur:
Tags und Links logging defensive-programming vala