Sono nuovo di programmazione Vala ed avere esperienze con Java e .NET ma non sono stato in grado di trovare qualcosa di utile su come effettuare il login con Vala. C'è qualche funzione di registrazione utile come log4j o log4net o qual è il modo suggerito per accedere a Vala con il ridimensionamento in diversi livelli di registrazione come errore, warn, debug e trace? E che dire della programmazione difensiva come asserzioni e contratti? C'è qualche o qual è il modo suggerito per fare una programmazione difensiva e ottenere i registri più utili con tracce di stack e una causa root precisa? Grazie per un consiglio.registrazione con Vala
risposta
Logging
Vala ha alcuni piuttosto robuste strutture di registrazione integrate. È possibile utilizzare debug()
, message()
, warning()
, error()
, e critical()
come scorciatoie per il leggermente più complessa funzione log()
. Tutti sono inclusi nella base (automaticamente inclusa) GLib
namespace.
Se si desidera reindirizzare l'uscita log o inviare diversi tipi di messaggi a diverse destinazioni, tutto ciò che serve è nel GLib.Log
namespace. Potresti voler leggere lo glib docs on logging per quello che succede dietro le quinte di là.
Programmazione difensiva
Vala include anche il supporto per le affermazioni e contratti. La versione corta: assert()
e assert_not_reached()
per asserzioni, e requires()
e ensures()
nel metodo di firme per i contratti. Vedi la sezione tutorial su Assertions and Contract Programming per maggiori informazioni.
errore Manipolazione
la gestione degli errori di Vala è un po 'strano: di aspetto simile alle eccezioni, ma non proprio la stessa cosa. La sezione tutorial su Error Handling copre le basi abbastanza bene, e ancora una volta potrebbe essere utile leggere il glib docs on errors per ottenere una comprensione più avanzata di quello che sta succedendo dietro le quinte. Per quanto ne so, non c'è modo di ottenere una traccia dello stack dagli errori Vala - solo un tipo e un messaggio.
Best Practices
In termini di migliori pratiche, penso Vala è simile sufficiente per Java o C# che le pratiche già conoscete possono essere applicate in senso generale. Suggerisco di giocare con queste funzionalità per avere un'idea di come appaiono le specifiche in Vala. In bocca al lupo!
In aggiunta alla @chazomaticus grande risposta, è possibile ottenere stacktrace da Vala dal unwiding lo stack di chiamate.
E 'solo che questo non è cotto nella lingua Vala.
mi capita di avere scritto una tale libreria: ivy
vorrei aggiungere 2 cose da @chazomaticus risposta:
Perché io non sono in grado di vedere eventuali uscite di debug/log?
È necessario impostare la variabile di ambiente
G_MESSAGES_DEBUG
suall
. Che è anche menzionato dalla documentazione, ma non ulteriormente spiegato. Per esempio. per debug:public static int main (string[] args) { // Use "G_MESSAGES_DEBUG=all ./test" to print debug messages! // Output: ``** (process:<PID>): DEBUG: <FILENAME>:<LINE>: my 10. debug message`` debug ("my %d. %s", 10, "debug message"); return 0; } valac --pkg glib-2.0 GLib.debug.vala G_MESSAGES_DEBUG=all ./GLib.debug ./GLib.debug
Se si vuole further restrict l'uscita, è possibile utilizzare
error
,warning
,critical
,message
,info
,debug
ehelp
invece diall
.Dove è possibile trovare la documentazione per ogni funzione di registrazione?
Ulteriore lettura:
- 1. Vala sopravviverà?
- 2. Come utilizzare una GUI Qt con Vala?
- 3. Vala per Android?
- 4. Vala è un linguaggio multipiattaforma?
- 5. Vala per plug-in pidgin
- 6. Applicazione GNOME/Vala per l'esecuzione su Windows
- 7. Posso programmare per iPhone in Vala?
- 8. Come generare file GIR dal compilatore Vala?
- 9. È possibile utilizzare Vala senza GObject?
- 10. Esecuzione del comando di sistema in Vala
- 11. Come posso importare altri file in Vala?
- 12. Compilare una fonte Vala Su Windows
- 13. GUI di Vala e logica in C++
- 14. registrazione con filtri
- 15. Registrazione distribuita con canale
- 16. Registrazione vocale con Java
- 17. Rimuovi registrazione con Proguard
- 18. Salvataggio del profilo con la registrazione nella registrazione di Django
- 19. Sintassi alternativa per C++, a la Genie per Vala?
- 20. primavera dati registrazione con specifiche
- 21. Registrazione con regasm e regsvcs
- 22. Registrazione Spring-Boot con log4j2?
- 23. NoClassDefFoundError con registrazione strumenti clojure
- 24. PCL - Registrazione globale con LOM
- 25. Registrazione tramite Android con Ant
- 26. Log4Net: registrazione con ora UTC
- 27. Registrazione errori client con Elmah
- 28. Registrazione Java con classi astratte
- 29. Registrazione dati binari con arricciatura
- 30. Quartz.Net - Registrazione comune con log4net
fa Vala messaggi di supporto personalizzati per violazioni del contratto? O darà un messaggio di errore predefinito criptico? Sto cercando di trovare un buon modo per generare errori e le sezioni predefinite di "Gestione degli errori"/"Programmazione contrattuale" del tutorial di Vala non sembrano descrivere nulla di veramente utile. – weberc2
Sembra che i contratti siano compilati in chiamate a g_return_if_fail(), che non supporta alcun messaggio di errore personalizzato. E hai ragione che il messaggio di errore che mostra dal codice C generato non è il più utile. Se vuoi che vengano lanciati errori personalizzati con i tuoi messaggi, Vala non ti offre zucchero sintattico: dovrai farlo alla vecchia maniera con if e throw. – chazomaticus