Wo schreibt QGIS seine Fehlerprotokollmeldungen?

33

Ich möchte das Fehlerprotokoll für die Abstürze in QGIS 2.0 lesen und kopieren. Der Fehler, den ich erhalte, friert QGIS ein, daher muss ich Strg-Alt-Entf drücken. Ich kann die letzte Nachricht in der Kontrollleiste sehen, sie jedoch nicht kopieren oder zurückblättern, um die früheren Nachrichten anzuzeigen. Wenn ich es erneut öffne, wurde das Protokollmeldungsfenster auf Null zurückgesetzt (QGIS wird gestartet usw.), sodass alle gewünschten Transformationsfehlermeldungen verschwunden sind.

Werden die älteren Protokollnachrichten irgendwo auf die Festplatte geschrieben?

IanS
quelle

Antworten:

31

QGIS schreibt seine Protokollnachrichten standardmäßig nicht in eine Datei.

Wenn Sie einen Debugbuild haben (normalerweise Nachtschwärmer), werden diese nach stdout geschrieben. Das heißt, wenn Sie es in einem Terminal unter Linux ausführen, werden die Nachrichten dort angezeigt. Unter Windows gibt es meines Erachtens ein Tool namens Debugging Tools für Windows oder ähnliches, das die Meldungen abfangen kann.

Eine Alternative ist die Verwendung von minimalem Python-Scripting. Jede Nachricht wird als Qt-Signal ausgegeben. Deshalb können wir uns mit diesen Signalen verbinden und sie in eine Datei schreiben. Kopieren Sie einfach den folgenden Befehl in Ihre Python-Konsole

Für 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)

Oder für 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)

Wenn Sie diesen Code ausführen, wird die Ausgabe in geschrieben /tmp/qgis.log.

Matthias Kuhn
quelle
Es sollte eine Leerzeile zwischen dem Ende der Funktionsdefinition und der letzten Zeile sein , dass die Python - Konsole mit der Kopie , glücklich zu sein / paste
raphael
21

Dies hilft bei diesem speziellen Problem zwar nicht, aber wenn Sie die Protokolle nur zur Laufzeit anzeigen möchten (dh QGIS stürzt nicht ab ), können Sie das Fenster "Protokollmeldungen" aktivieren.

In QGIS gehen Sie zu: Ansicht> Panels> Log Messages

Stellen Sie sicher, dass das Kontrollkästchen aktiviert ist.

michaeltomiak
quelle
9
Bitte lesen Sie die Frage noch einmal.
Stefan
Wie können Sie die Registerkarten im Protokollmeldungsfenster wiederherstellen, wenn Sie einige verlieren?
User32882
+1, da dies die richtige Antwort ist. Der Kommentar zur Stackexchange-Community ist jedoch falsch.
Grzegorz Oledzki
8

Bearbeitung => Optionen

Sie müssen Folgendes überprüfen: 'Dialog nach dem Ausführen eines Algorithmus geöffnet lassen'

Danach können Sie über das Fehlerprotokoll hinaus kopieren

Bildbeschreibung hier eingeben

Elmo
quelle
1

Hört sich natürlich an, aber ich habe es nützlich gefunden, das QGIS-Meldungsfeld als schwebenden Dialog zu gestalten, damit Sie es von oben nach unten auf Ihrem Bildschirm erweitern können. Auf diese Weise können Sie beim Absturz von QGIS mehr Meldungen auf dem Bildschirm sehen und drucken. Entschuldigung, ich weiß nicht, wo QGIS diese Nachrichten schreibt.

AMK
quelle