Tôi đang sử dụng đoạn mã sau trong pyqgis để bắt lỗi / cảnh báo từ lớp WMS, để kích hoạt phát lại ngay khi phát hiện lỗi / cảnh báo (dựa trên câu hỏi trước: Cách bắt thông báo lỗi WMS từ bảng thông báo nhật ký trong QGIS với trăn? )
Nhưng rõ ràng nhà cung cấp "WMS" dường như có một hạn chế là không gửi hơn 100 yêu cầu lỗi đến nhật ký tin nhắn, nghĩa là sau lỗi thứ 100 / cảnh báo tôi không thể bắt được bất kỳ tín hiệu nào, ngay cả khi lớp WMS là vẫn không trả lời đúng. Tuy nhiên, nếu tôi gửi tin nhắn của riêng mình đến bảng điều khiển nhật ký thì dường như không có bất kỳ hạn chế nào (xem mã bên dưới).
Có khả năng bắt lỗi / cảnh báo trực tiếp từ trường hợp chịu trách nhiệm ở đây không (tôi đoán đó là nhà cung cấp WMS), thay vì sử dụng bảng nhật ký tin nhắn? Hoặc có thể chỉ cần xóa / đặt lại bảng thông báo nhật ký trong một quy trình đang chạy hoặc loại bỏ giới hạn?
Tôi đang sử dụng QGIS 2.18.2 trên Windows 10.
Đây là mã trăn:
# 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)
CẬP NHẬT: Tôi đã gửi một yêu cầu tính năng (xem: https://hub.qgis.org/issues/16168 )