Où QGIS écrit-il ses messages de journal des erreurs?

33

Je souhaite lire et copier le journal des erreurs pour les plantages que je rencontre dans QGIS 2.0. L'erreur que je reçois bloque QGIS, je dois donc ctrl-alt-del. Je peux voir le dernier message dans le panneau, mais je ne peux pas le copier ou revenir en arrière pour voir les messages précédents. Lorsque je le rouvre, le panneau des messages du journal est remis à zéro (démarrage de QGIS, etc.), de sorte que tous les messages d'erreur de transformation que je veux ont disparu.

Les anciens messages de journal sont-ils écrits sur le disque quelque part?

IanS
la source

Réponses:

31

Par défaut, QGIS n'écrit pas ses messages de journal dans un fichier.

Si vous avez une version de débogage (les nightlies le sont normalement), elles sont écrites sur stdout. Cela signifie que si vous l'exécutez dans un terminal sous Linux, vous y verrez les messages. Sous Windows, je pense qu'il existe un outil appelé Outils de débogage pour Windows ou similaire qui peut intercepter les messages.

Une alternative consiste à utiliser un minimum de scripts python. Chaque message est émis sous forme de signal Qt. Par conséquent, nous pouvons nous connecter à ces signaux et les écrire dans un fichier. Copiez simplement la commande suivante sur votre console python

Pour 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)

Ou pour 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)

Lorsque vous exécutez ce code, la sortie sera écrite /tmp/qgis.log.

Matthias Kuhn
la source
Il devrait y avoir une ligne vide entre la fin de la définition de la fonction et la ligne finale pour que la console Python soit satisfaite du copier / coller
raphael
21

Bien que cela ne résoudra pas ce problème particulier, si vous souhaitez simplement voir les journaux pendant l'exécution (c'est-à-dire que QGIS ne plante pas ), vous pouvez activer le panneau Messages de journal.

Dans QGIS, accédez à: Affichage> Panneaux> Messages de journal

Assurez-vous que la case est cochée.

michaeltomiak
la source
9
Veuillez lire la question une fois de plus.
Stefan
Comment récupérer les onglets du panneau des messages du journal si vous en perdez quelques-uns?
user32882
+1 car c'est la bonne réponse. Le commentaire sur la communauté Stackexchange est cependant hors de propos.
Grzegorz Oledzki
8

Traitement => Options

Vous devez vérifier ceci: 'Garder la boîte de dialogue ouverte après l'exécution d'un algorithme'

après cela, vous pouvez copier après le journal des erreurs

entrez la description de l'image ici

elmo
la source
1

Cela peut sembler évident, mais j'ai trouvé utile de faire de la boîte de messages QGIS une boîte de dialogue flottante afin de pouvoir l'étendre de haut en bas de votre écran. Cela vous permettrait de voir et d'imprimer plus de messages à l'écran lorsque QGIS se bloque. Désolé, je ne sais pas où QGIS écrit ces messages.

AMK
la source