Gdzie QGIS zapisuje komunikaty w dzienniku błędów?

33

Chcę przeczytać i skopiować plik dziennika błędów w przypadku awarii występujących w QGIS 2.0. Błąd, który pojawia się, powoduje zawieszenie się QGIS, więc muszę ctrl-alt-del. Widzę ostatnią wiadomość w panelu, ale nie mogę jej skopiować ani przewinąć do tyłu, aby zobaczyć wcześniejsze wiadomości. Po ponownym otwarciu panel komunikatów dziennika został zresetowany do zera (uruchomienie QGIS itp.), Więc wszystkie komunikaty o błędach transformacji, których chcę, zniknęły.

Czy starsze komunikaty dziennika są gdzieś zapisywane na dysku?

IanS
źródło

Odpowiedzi:

31

QGIS domyślnie nie zapisuje komunikatów do pliku.

Jeśli masz wersję do debugowania (zwykle są to nightlies), są one zapisywane na standardowe wyjście. Oznacza to, że jeśli uruchomisz go w terminalu na systemie Linux, zobaczysz tam wiadomości. W systemie Windows myślę, że istnieje narzędzie o nazwie Narzędzia do debugowania dla systemu Windows lub podobne, które może przechwytywać wiadomości.

Alternatywą jest użycie minimalnego skryptu w języku Python. Każda wiadomość jest emitowana jako sygnał Qt. Dlatego możemy połączyć się z tymi sygnałami i zapisać je w pliku. Po prostu skopiuj następujące polecenie do konsoli Pythona

W przypadku QGIS 3:

filename = '/tmp/qgis.log'

def write_log_message(message, tag, level):
    with open(filename, 'a') as logfile:
        logfile.write('{tag}({level}): {message}'.format(tag=tag, level=level, message=message))

QgsApplication.messageLog().messageReceived.connect(write_log_message)

Lub w przypadku QGIS 2:

filename = '/tmp/qgis.log'

def write_log_message(message, tag, level):
    with open(filename, 'a') as logfile:
        logfile.write('{tag}({level}): {message}'.format(tag=tag, level=level, message=message))

QgsMessageLog.instance().messageReceived.connect(write_log_message)

Po uruchomieniu tego kodu dane wyjściowe zostaną zapisane /tmp/qgis.log.

Matthias Kuhn
źródło
Pomiędzy końcem definicji funkcji a ostatnim wierszem powinna znajdować się pusta linia, aby konsola Python była zadowolona z kopiowania / wklejania
raphael
21

Chociaż nie pomoże to w rozwiązaniu tego konkretnego problemu, jeśli chcesz tylko wyświetlać dzienniki w czasie wykonywania (tj. QGIS nie ulega awarii), możesz włączyć panel Wiadomości w dzienniku.

W QGIS przejdź do: Widok> Panele> Loguj wiadomości

Upewnij się, że pole jest zaznaczone.

michaeltomiak
źródło
9
Przeczytaj pytanie jeszcze raz.
Stefan,
Jak odzyskać zakładki w panelu komunikatów dziennika, jeśli zgubisz parę?
user32882
+1, ponieważ jest to poprawna odpowiedź. Komentarz na temat społeczności Stackexchange jest jednak nie na temat.
Grzegorz Oledzki
8

Przetwarzanie => Opcje

Musisz to zaznaczyć: „Zachowaj otwarte okno dialogowe po uruchomieniu algorytmu”

po tym możesz skopiować obok dziennika błędów

wprowadź opis zdjęcia tutaj

Elmo
źródło
1

Może to zabrzmi oczywisto, ale uznałem za użyteczne, aby okno QGIS było swobodnym oknem dialogowym, dzięki czemu można go rozciągać od góry do dołu ekranu. Umożliwiłoby to wyświetlanie i drukowanie kolejnych komunikatów po awarii QGIS. Niestety nie wiem, gdzie QGIS zapisuje te wiadomości.

AMK
źródło