QGISはどこでエラーログメッセージを書きますか?


33

QGIS 2.0で発生しているクラッシュのエラーログを読んでコピーペーストしたいです。エラーが発生するとQGISがフリーズするため、ctrl-alt-delを実行する必要があります。パネルで最後のメッセージを見ることができますが、コピーしたり、スクロールして前のメッセージを見ることができません。再度開くと、ログメッセージパネルがゼロにリセットされたため(QGISの起動など)、必要な変換エラーメッセージがすべてなくなりました。

古いログメッセージはディスクのどこかに書き込まれていますか?

回答:


31

QGISはデフォルトではログメッセージをファイルに書き込みません。

デバッグビルド(通常はナイトリー)がある場合、それらはstdoutに書き込まれます。つまり、Linuxのターミナルで実行すると、そこにメッセージが表示されます。Windowsには、Debugging Tools for Windowsなどと呼ばれる、メッセージを傍受できるツールがあると思います。

別の方法は、最小限のpythonスクリプトを使用することです。すべてのメッセージはQtシグナルとして出力されます。したがって、これらの信号に接続してファイルに書き込むことができます。次のコマンドをPythonコンソールにコピーするだけです

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)

または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)

このコードを実行すると、出力はに書き込まれ/tmp/qgis.logます。


Pythonコンソールがコピー/貼り付けに満足するために、関数定義の最後と最終行の間に空白行があるはずです
-raphael

21

これはこの特定の問題には役立ちませんが、実行時にログを表示するだけの場合(つまり、QGISがクラッシュしない場合)、[ログメッセージ]パネルを有効にできます。

QGISで、[表示]> [パネル]> [メッセージのログ]に移動します。

ボックスがチェックされていることを確認してください。


9
もう一度質問を読んでください。
ステファン

カップルを失った場合、ログメッセージパネルのタブをどのように取り戻しますか?
user32882

これが正解なので+1。ただし、Stackexchangeコミュニティに関するコメントは範囲外です。
グジェゴルツオレジキ

8

処理=>オプション

これを確認する必要があります:「アルゴリズムの実行後にダイアログを開いたままにする」

その後、エラーログを過ぎてコピーできます

ここに画像の説明を入力してください


1

当たり前のように聞こえるかもしれませんが、QGISメッセージボックスをフローティングダイアログにして、画面の一番上から一番下まで拡張できると便利です。これにより、QGISがクラッシュしたときに、より多くのメッセージを表示および印刷できます。申し訳ありませんが、QGISがこれらのメッセージを書き込む場所がわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.