Qt 實現 Logger 日誌的顯示

lk989898發表於2016-08-11
來源:http://my.oschina.net/gongshang/blog/353590
摘要
日誌一般是程式設計師自己看,即使程式中需要用控制元件顯示,要求一般也不太高。 但需要能夠控制顯示的總共行數,能夠備份至檔案。這裡記錄寫網上搜集整理的資料和個人的經驗。

Qt qDebug or 開源庫

基於 Qt qDebug

Qt 提供 qInstallMessageHandler(Qt5)或者qInstallMsgHandler(Qt4),可以對QDebug、QWarning、QError等進行重定向等處理。

可以參考Qt Assistant 的幫助文件,或者參考Qt之日誌輸出檔案進行實現。

  • 缺點: 沒有嘗試過,但是有人不支援多執行緒,至少需要自己去考慮多執行緒安全問題
  • 缺點: 如果想要讓訊息既存檔,又同時在視窗Widget中顯示,可能會麻煩點
  • 需要自己實現檔案大小的判斷,以及歷史檔案的備份
  • 如果只是將日誌重定向至某個檔案,不需要顯示,這方法挺好。推薦。

開源庫

QsLog (個人推薦)

簡單的日誌框架,可以新增多個日誌的destination,可以使用Signal/Slot機制方便的將日誌輸出到Widget。

專案地址:QsLog的Bitbucket地址

QxtLogger

QxtLib的一部分,如果也是用QxtLib的其他功能,肯定也會用這個。但是我沒用過

專案地址:QxtLogger Class Reference

Widget 顯示空間的選擇

使用QPlainTextEdit (推薦)

If you want to limit the total number of paragraphs in a QPlainTextEdit, as it is for example useful in a log viewer, then you can use the maximumBlockCount property. The combination ofsetMaximumBlockCount() and appendPlainText() turns QPlainTextEdit into an efficient viewer for log text. The scrolling can be reduced with thecenterOnScroll() property, making the log viewer even faster. Text can be formatted in a limited way, either using a syntax highlighter (see below), or by appending html-formatted text with appendHtml(). WhileQPlainTextEdit does not support complex rich text rendering with tables and floats, it does support limited paragraph-based formatting that you may need in a log viewer.

上一段引用來自Qt的幫助文件。組合 QPlainTextEdit 的setMaximumBlockCount() 和 appendPlainText() 方法,來實現logger的顯示,可以控制總共顯示的行數。

  • 優點是更輕量級
  • 可以利用HTML(<p><span>)進行簡單的高亮/行背景色。
  • 缺點,進行篩選相對麻煩

使用 QListWidget 或者 QTableWidget

可以設定總行數來控制顯示的日誌數量。

  • 缺點,相對厚重了些
  • 優點,可以方便的用不同顏色高亮Error,Warning等。
  • 優點,可以方便的進行篩選,快速找到error等。

單例模式

如果基於qDebug自己造輪子,而且日誌的顯示視窗需要常開,建議使用單例模式(參考CSDN 或更直接的【CSDN】)。


參考:

相關文章