Trường hợp nào QGIS viết thông báo nhật ký lỗi của nó?


33

Tôi muốn đọc và sao chép nhật ký lỗi cho các sự cố tôi gặp phải trong QGIS 2.0. Lỗi tôi đang đóng băng QGIS vì vậy tôi phải ctrl-alt-del. Tôi có thể thấy tin nhắn cuối cùng trong bảng điều khiển, nhưng không thể sao chép hoặc cuộn lại để xem các tin nhắn trước đó. Khi tôi mở lại, bảng thông báo nhật ký đã được đặt lại về 0 (bắt đầu từ QGIS, v.v.), vì vậy tất cả các thông báo lỗi chuyển đổi tôi muốn đã biến mất.

Các thông điệp tường trình cũ hơn được ghi vào đĩa ở đâu đó?

Câu trả lời:


31

Theo mặc định, QGIS không ghi thông điệp tường trình của mình vào một tệp.

Nếu bạn có bản dựng gỡ lỗi (thường là nightlies), chúng sẽ được ghi vào thiết bị xuất chuẩn. Điều đó có nghĩa là nếu bạn chạy nó trong một thiết bị đầu cuối trên linux, bạn sẽ thấy các thông báo ở đó. Trên Windows tôi nghĩ có một công cụ gọi là Công cụ gỡ lỗi cho Windows hoặc tương tự có thể chặn các tin nhắn.

Một cách khác là sử dụng một số kịch bản python tối thiểu. Mỗi tin nhắn được phát ra dưới dạng tín hiệu Qt. Do đó chúng ta có thể kết nối với các tín hiệu này và ghi chúng vào một tệp. Chỉ cần sao chép lệnh sau vào bảng điều khiển python của bạn

Đối với 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)

Hoặc cho 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)

Khi bạn chạy mã này, đầu ra sẽ được ghi vào /tmp/qgis.log.


Cần có một dòng trống giữa phần cuối của định nghĩa hàm và dòng cuối cùng để bảng điều khiển Python hài lòng với bản sao / dán
raphael

21

Mặc dù điều này sẽ không giúp ích cho vấn đề cụ thể này, nhưng nếu bạn chỉ muốn xem nhật ký trong thời gian chạy (tức là QGIS không gặp sự cố), bạn có thể bật bảng Thông báo Nhật ký.

Trong QGIS Chuyển đến: Xem> Bảng> Tin nhắn nhật ký

Hãy chắc chắn rằng hộp được kiểm tra.


9
Xin vui lòng đọc câu hỏi một lần nữa.
Stefan

Làm thế nào để bạn lấy lại các tab trong bảng thông báo nhật ký nếu bạn mất một vài?
user32882

+1 vì đây là câu trả lời đúng. Nhận xét về cộng đồng Stackexchange là không phù hợp.
Grzegorz Oledzki

8

Đang xử lý => Tùy chọn

Bạn cần kiểm tra điều này: 'Giữ hộp thoại mở sau khi chạy thuật toán'

sau đó bạn có thể sao chép qua nhật ký lỗi

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


1

Nghe có vẻ rõ ràng, nhưng tôi đã thấy hữu ích khi biến hộp thông báo QGIS thành một cuộc đối thoại nổi để bạn có thể mở rộng nó từ trên xuống dưới màn hình của bạn. Điều này sẽ cho phép bạn xem và in màn hình nhiều tin nhắn hơn khi QGIS gặp sự cố. Xin lỗi, tôi không biết QGIS viết những tin nhắn này ở đâu.

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.