如何解决QGIS中“日志消息”面板的问题:“未记录100个以上的请求错误。”?


9

我在pyqgis中使用以下代码从WMS层捕获错误/警告,以便在检测到错误/警告后立即触发重新绘制(基于先前的问题:如何从日志消息面板捕获WMS错误消息)在QGIS和python中?

但是显然,“ WMS”提供者似乎有一个限制,即不能向消息日志发送超过100个错误请求,这意味着在第100个错误/警告之后,即使WMS层处于仍然无法正确响应。但是,如果我将自己的消息发送到日志面板,则似乎没有任何限制(请参见下面的代码)。

是否有可能直接从此处负责的实例(我猜是WMS提供者)捕获错误/警告,而不是使用消息日志面板?还是只是在运行的进程中清除/重置日志消息面板或删除限制?

我正在Windows 10上使用QGIS 2.18.2。

这是python代码:

# coding=utf-8

from qgis.core import *

wmsLayer_name="wms-dtk50_wgs"
url_with_params ='url=http://sg.geodatenzentrum.de/wms_dtk50?&crs=EPSG:25832&featureCount=10&format=image/png&layers=DTK50&styles='

wmsLayer = QgsRasterLayer(url_with_params, wmsLayer_name,'wms')
QgsMapLayerRegistry.instance().addMapLayer(wmsLayer)

def errorCatcher( msg, tag, level ):
    if tag == 'WMS' and level != 0:     #Warnings or Errors (0: Info, 1:Warning, 2:Error)
        print "WMS error detected!"
        myWMSLayer = QgsMapLayerRegistry.instance().mapLayersByName("wms-dtk50_wgs")[0]
        myWMSLayer.triggerRepaint()

# connect with messageReceived SIGNAL from QgsMessageLog to an errorCatcher custom function
# instantly reacts if error/warning occurs
QgsMessageLog.instance().messageReceived.connect( errorCatcher )

#after 100 times triggering a "wmsLayer.triggerRepaint()", 
# I get following warning in log messages panel "WMS":
# "2017-01-17T07:17:52  1   Not logging more than 100 request errors."

#this does not raise any issues and prints all 500 test messages in the log panel:
for i in range(500):
    QgsMessageLog.instance().logMessage("Message #{}".format(i),"Test",2)

在此处输入图片说明

更新:我提交了功能请求(请参阅:https : //hub.qgis.org/issues/16168


1
这个限制似乎在C ++代码的qgswmsprovider类中是固定的。从源代码编译QGIS是否适合您?
史蒂文·凯

@Steven Kay啊,好的,我知道,代码中有相应的部分……很不幸,我没有从源代码进行编译的经验。代码运行后,我需要在多台计算机上安装QGIS。但是如果没有其他选择,我想我别无选择...无论如何要提示!
ADorsch

Answers:


3

现在,限制100已在WMS提供程序中进行了硬编码。但是QGIS是一个很棒的开源项目,您可以提交功能请求以将该限制转换为可配置参数。

任何开发人员都可以接受此功能请求,然后向QGIS提交新的请求请求。如果解决方案被接受,那么核心开发人员将很乐意为即将到来的版本3和当前的2.14.x和2.18.x版本应用更改。

因此,您的问题的答案是向QGIS提交新功能请求。


好的,谢谢你的建议。尽管我希望得到一些解决方法的想法,但我想这是我可能会得到的答案。因此,我将不得不考虑通过操纵源代码来从源代码进行编译,或者提交功能请求,并希望将来可能会实现解决方案……
ADorsch,2017年

如果您准备并提交功能请求,那么将来您将在帮助其他面临相同限制的人。您正在将有用的东西还给社区。虽然您可以通过将其限制更改为5000或10000来解决100个限制,但是开发人员将尝试以一种适合所有人(不仅仅适合您)的方式来满足您的请求,同时保持代码的一致性和文档的更新。通过提交功能请求,您将为改善QGIS做出贡献。在功能部件请求被接受并且合并请求请求之后,您可以安装和使用每夜构建。
jgrocha '17

绝对,我在这里与您同在!谢谢您的陈述,并指出,像QGIS这样成功的开源工具是基于活跃的社区的,这使它如此高度动态,并且每个人都可以为这一发展做出贡献。
ADorsch '17

顺便说一下,我将准备功能请求!
ADorsch '17
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.