Jestem nowy w programowaniu Vala i mam doświadczenia z Javą i .NET, ale nie byłem w stanie znaleźć niczego przydatnego w logowaniu się w Vala. Czy istnieje przydatny mechanizm logowania, taki jak log4j lub log4net, lub jaki jest sugerowany sposób logowania się do Vala przy skalowaniu do kilku poziomów rejestrowania, takich jak błąd, ostrzeżenie, debugowanie i śledzenie? A co z programowaniem defensywnym, takim jak twierdzenia i kontrakty? Czy istnieje jakikolwiek sugerowany sposób programowania defensywnego i uzyskać najbardziej przydatne dzienniki ze śladami stosu i dokładną przyczyną źródłową? Dzięki za poradę.Logowanie z Vala
Odpowiedz
Logging
Vala ma kilka dość solidnych instytucji rejestrowania wbudowanych w. Można użyć debug()
, message()
, warning()
, error()
i critical()
jako skróty do nieco bardziej skomplikowanych log()
funkcji. Wszystkie są uwzględnione w bazie (automatycznie dołączone) GLib
namespace.
Jeśli chcesz przekierować dane wyjściowe dziennika lub wysłać różne typy wiadomości do różnych miejsc docelowych, wszystko, czego potrzebujesz, znajduje się w numerze GLib.Log
namespace. Możesz przeczytać glib docs on logging o tym, co dzieje się za kulisami.
Defensive Programowanie
Vala obejmuje także wsparcie dla twierdzeń i umów. Krótka wersja: assert()
i assert_not_reached()
dla stwierdzeń i requires()
i ensures()
w podpisach metod dla umów. Aby uzyskać więcej informacji, zobacz sekcję samouczka na stronie Assertions and Contract Programming.
Obsługa błędów
obsługa błędów Vala jest trochę dziwne: podobnie wyglądające do wyjątków, ale nie całkiem to samo. Sekcja samouczka pod tytułem Error Handling opisuje podstawy całkiem dobrze i znowu może być pomocne przeczytanie glib docs on errors, aby uzyskać bardziej zaawansowane zrozumienie tego, co dzieje się za kulisami. O ile wiem, nie ma sposobu, aby uzyskać ślad stosu z błędów Vala - tylko typ i wiadomość.
Best Practices
Pod względem najlepszych praktyk, myślę Vala jest podobna wystarczy Java lub C#, że praktyki Wiesz już może być stosowany w sensie ogólnym. Sugeruję zabawę z tymi funkcjami, aby poznać specyfikę Vali. Powodzenia!
Jako dodatek do @chazomaticus, wspaniała odpowiedź, możesz może uzyskać stacktrace z Vala, odrzucając stos wywołań.
Po prostu nie jest to wypalane w języku Vala.
zdarza mi się napisać taką bibliotekę: ivy
Chciałbym dodać 2 rzeczy do @chazomaticus odpowiedź:
Dlaczego nie jestem w stanie zobaczyć dowolne wyjścia debug/log?
Musisz ustawić zmienną środowiskową
G_MESSAGES_DEBUG
naall
. Co zostało również wspomniane w dokumentacji, ale nie zostało to dalej wyjaśnione. Na przykład. dla 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
Jeśli chcesz further restrict wyjście, można użyć
error
,warning
,critical
,message
,info
,debug
ihelp
zamiastall
.Gdzie mogę znaleźć dokumentację dla każdej funkcji logowania?
Dalsze czytanie:
- 1. Jak korzystać z Qt GUI z Vala?
- 2. Zarządzanie pamięcią Vala
- 3. Vala dla Androida?
- 4. Vala dla wtyczek pidgin
- 5. Ogólna funkcja w Vala
- 6. Jak wygenerować pliki GIR z kompilatora Vala?
- 7. Czy język vala to krzyżowy?
- 8. Struktura testów jednostkowych dla Vala
- 9. Kompilacja źródło Vala W Windows
- 10. log z pytona logowanie
- 11. Logowanie z zewnętrznej aplikacji
- 12. Pojedyncze logowanie z WIF
- 13. Jak mogę rozpowszechniać (open-source) projekt Vala?
- 14. Aplikacja GNOME/Vala do działania pod Windows
- 15. Jak używać atrybutów CCode w Vala?
- 16. Czy mogę kodować na iPhone'a w Vala?
- 17. Vala GUI i logika w C++
- 18. Czy produkcja Vala i Genie jest gotowa?
- 19. logowanie formularz POST z cURL
- 20. Twisted logowanie
- 21. Logowanie podczas testowania z RSpec i Authlogic
- 22. Logowanie do aplikacji wieloprocesorowej wraz z wielowątkowością
- 23. Logowanie z konta gmail przez C# .NET
- 24. Bezpieczne logowanie z prawidłowym uwierzytelnieniem w PHP
- 25. Logowanie do witryny korzystającej z uwierzytelniania Live.com
- 26. Heroku toolbelt logowanie z Cygwin wiszące
- 27. Logowanie do konsoli z rozszerzenia Firefox?
- 28. Jak wyłączyć logowanie log4j z kodu Java
- 29. Logowanie użytkownika z Elmah dla WCF Webservices
- 30. Pojedyncze logowanie Dotnetopenauth z niestandardowym dostawcą tożsamości
Czy Vala wiadomości wsparcie dla niestandardowych naruszeń umowy? A może zamierza podać tajemniczy domyślny komunikat o błędzie? Próbuję znaleźć dobry sposób na zgłaszanie błędów, a domyślne części "Obsługa błędów"/"Programowanie kontraktowe" w samouczku Vala nie opisują niczego naprawdę użytecznego. – weberc2
Wygląda na to, że kontrakty są kompilowane w wywołania funkcji g_return_if_fail(), która nie obsługuje żadnego niestandardowego komunikatu o błędzie. I masz rację, że komunikat o błędzie z wygenerowanego kodu C nie jest najbardziej pomocny. Jeśli chcesz, aby niestandardowe błędy z twoimi własnymi wiadomościami zostały rzucone, Vala nie oferuje ci żadnego syntaktycznego cukru - po prostu musisz to zrobić w staroświecki sposób za pomocą if i throw. – chazomaticus