QGIS在哪里将其错误日志消息写入?


33

我想读取并复制错误日志,以记录我在QGIS 2.0中遇到的崩溃。我遇到的错误冻结了QGIS,因此我必须按ctrl-alt-del。我可以在面板中看到最后一条消息,但是无法复制或滚动回以查看较早的消息。当我重新打开它时,日志消息面板已重置为零(QGIS正在启动,等等),因此我想要的所有转换错误消息都消失了。

是否将较旧的日志消息写入磁盘的某个位置?

Answers:


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控制台的最后一行之间应该有一个空白行,以使Python控制台对复制/粘贴感到满意
raphael

21

尽管这对解决特定问题没有帮助,但是如果您只想在运行时查看日志(即QGIS 不会崩溃),则可以启用“日志消息”面板。

在QGIS中,转到:视图>面板>日志消息

确保选中此框。


9
请再读一次这个问题。
Stefan 2015年

如果您输了几对,如何返回日志消息面板中的选项卡?
user32882

+1,因为这是正确的答案。但是,关于Stackexchange社区的评论与众不同。
Grzegorz Oledzki

8

处理=>选项

您需要检查以下内容:“运行算法后保持对话框打开”

之后,您可以复制过去的错误日志

在此处输入图片说明


1

听起来似乎很明显,但是我发现使QGIS消息框成为浮动对话框很有用,这样您就可以将其从屏幕的顶部扩展到底部。这将使您在QGIS崩溃时查看并打印更多消息。抱歉,我不知道QGIS在哪里写这些消息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.