I am using a WMS-service as background map in an automatized atlas print process.
Unfortunately the WMS-service seems to have a problem on server side, as it is sometimes not responding (see error message: map request failed … server replied bad request (see attached image)). By just triggering a repaint after some seconds or minutes, the WMS loads correctly.
Now I would like to catch this behaviour via python/pyqgis because the atlas print process produces empty background pages when the WMS is not responding. So I would need to check if this particular error occurs, and force a triggerRepaint() until the WMS-server responds correctly.
I don´t know how, since the error appears only in the log message panel, under the tab "WMS".
I already tried with try:…except… or by checking wmsLayer.isValid(), but this did not do the trick…
Is there anybody who generaly knows a way to catch this particular error appearing in the log messages panel?
Unfortunately the WMS-service is licensed, so I´m afraid the problem might not be reproducable…But I hope there is anybody out there who knows a way to catch errors from the log message panel.
I am using QGIS 2.18.2
With advice from Germán I was able to catch the error in the following way:
# 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."
Obviously the "WMS" provider seems to have a restriction of sending error requests to the messages log…opened a new question with this issue here: How to solve issue with log messages panel in QGIS: “Not logging more than 100 request errors.”?
Best Answer
In a Python QGIS Console write this:
What this code snippet does is to connect the
messageReceived
SIGNAL fromQgsMessageLog
to anerrorCatcher
custom function, which filters all messages of theWMS
tab that are Warnings or Errors (0: Info, 1:Warning, 2:Error) and allows you to react to them.