2012-05-01 20 views
8

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

22

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!

+0

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

+0

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

3

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

ivy

1

Chciałbym dodać 2 rzeczy do @chazomaticus odpowiedź:

  1. Dlaczego nie jestem w stanie zobaczyć dowolne wyjścia debug/log?

    Musisz ustawić zmienną środowiskową G_MESSAGES_DEBUG na all. 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 i help zamiast all.

  2. Gdzie mogę znaleźć dokumentację dla każdej funkcji logowania?

Dalsze czytanie: