Làm thế nào để giải quyết vấn đề với bảng thông báo nhật ký trong QGIS: Hiện không ghi nhật ký hơn 100 lỗi yêu cầu.


9

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)

nhập mô tả hình ảnh ở đây

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 )


1
Giới hạn dường như được kết nối cứng trong lớp qgswmsprovider trong mã C ++. Việc biên dịch QGIS từ nguồn có phải là một lựa chọn cho bạn không?
Steven Kay

@Steven Kay ah ok Tôi thấy, có phần theo mã ... Thật không may, tôi không có kinh nghiệm biên dịch từ nguồn. Ngay khi mã của tôi đang chạy, tôi cần cài đặt QGIS trên một số máy. nhưng nếu không có lựa chọn nào khác tôi đoán tôi không có lựa chọn nào khác ... dù sao thì thx cho gợi ý!
ADorsch

Câu trả lời:


3

Ngay bây giờ, giới hạn 100 được mã hóa cứng trong nhà cung cấp WMS. Nhưng QGIS là một dự án nguồn mở tuyệt vời và bạn có thể gửi yêu cầu tính năng để biến giới hạn này thành một tham số có thể định cấu hình.

Bất kỳ nhà phát triển nào cũng có thể nhận yêu cầu tính năng này và gửi yêu cầu kéo mới tới QGIS . Nếu giải pháp được chấp nhận, các nhà phát triển cốt lõi sẽ sẵn lòng áp dụng các thay đổi cho cả phiên bản 3 sắp tới và cho các phiên bản 2.14.x và 2.18.x hiện tại.

Vì vậy, câu trả lời cho câu hỏi của bạn là một yêu cầu tính năng mới gửi tới QGIS.


Ok thx cho lời khuyên đó. Mặc dù tôi đã hy vọng có được một số ý tưởng giải pháp, tôi đoán đây là câu trả lời nhiều nhất có thể tôi sẽ nhận được. Vì vậy, tôi sẽ phải xem xét việc biên dịch từ nguồn bằng cách thao tác mã nguồn hoặc gửi yêu cầu tính năng và hy vọng rằng có thể có một giải pháp được triển khai trong tương lai ...
ADorsch

Nếu bạn chuẩn bị và gửi yêu cầu tính năng, bạn sẽ giúp đỡ những người khác trong tương lai sẽ phải đối mặt với giới hạn tương tự. Bạn đang trả lại một cái gì đó hữu ích trở lại với cộng đồng. Mặc dù bạn có thể khắc phục giới hạn 100 bằng cách thay đổi thành 5000 hoặc 10000, nhưng các nhà phát triển sẽ cố gắng thực hiện yêu cầu của bạn theo cách phù hợp với tất cả, không chỉ cho bạn, giữ cho mã phù hợp và cập nhật tài liệu. Bằng cách gửi yêu cầu tính năng, bạn đang góp phần cải thiện QGIS. Sau khi yêu cầu tính năng được chấp nhận và yêu cầu kéo được hợp nhất, bạn có thể cài đặt và sử dụng các bản dựng hàng đêm.
jgrocha

Tuyệt đối, tôi đồng ý với bạn đây! Thx cho tuyên bố của bạn, chỉ ra rằng, một công cụ nguồn mở thành công như QGIS dựa trên một cộng đồng tích cực, điều làm cho nó rất năng động và cách mọi người có thể đóng góp cho sự phát triển này.
ADorsch

Tôi sẽ chuẩn bị một yêu cầu tính năng bằng cách này!
ADorsch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.