如何輸出 QT 源碼中的日誌?

原文地址

https://www.cnblogs.com/dizf/p/12456900.html

 

QT的應用程序在運行過程中,自己程序的日誌,我們是可以控制並打印輸出的,那麼當我們想定位到源碼中,查看某些錯誤輸出或者執行順序時,這時候就需要打開qt源碼的日誌開關了。

 一、對於qt本身的模塊

我們查看qt的源碼,看其日誌輸出使用的是:qCDebug,qCWarning,qCInfo,qCCritical,

 

 

那麼怎麼打開QT的源碼中累似qCDebug輸出呢?

我們瞭解到,qt本身有一套完整的日誌框架 ----> QLoggingCategory 

QLoggingCategory可以控制打印輸出類別和模塊。方便在調試時,過濾掉不關心的打印信息。

以qCDebug做說明:

我們打開qt,windows的源碼,看qwindowstablesupport類(此類是關於windows下手寫板的觸控類)

 

 

 

看到qCDebug得第一個參數 lcQpaTablet,我們找到其對應的聲明,發現它代表了一個模塊名:

 

 

 

我們知道了qCDebug打印日誌,是分模塊打印輸出的,對應各自的模塊,那麼怎麼打開這個模塊對應的日誌輸出呢?

我們通過查看QLoggingCategory類的說明,發現有五種方法設置日誌過濾規則及優先級:

如果我們使用qt默認的配置,關於過濾配置文件的路徑,通過代碼查看,可知qt讀取默認的配置路徑爲:%AppData%\Local/QtProje

 

1. 通過註冊的方法

 

 

 2.  QtProject/qtlogging.ini:在%AppData%\Local/QtProject創建qtlogging.ini文件 

 

3.  QLoggingSettingsParser 設置過濾規則

 

 

 

4. QT_LOGGING_CONF :環境變量,指定日誌過濾規則的文件,可以是相對路徑或絕對路徑:export QT_LOGGING_CONF=./LoggingCategory/logconfig.ini

5. QT_LOGGING_RULES :環境變量,可以設置多個規則用逗號分割:QT_LOGGING_RULES="*.debug=false;logA.loga.debug=false"

 

日誌文件的過濾規則說明:

 

 

 

 

 通過以上的方法,我們設置了打開 Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet") 模塊的日誌

運行程序查看,qt中源碼 QWindowsTabletSupport類中的 qCDebug 日誌都已經成功打印:

 

 

二、對於自定義的模塊

 

我們在自己定義的模塊中使用QLoggingCategory

1.聲明頭文件:#include <QLoggingCategory>

2.創建:使用宏 Q_LOGGING_CATEGORY(lCustomLog, "CustomLog")

3.設置過濾規則:QLoggingCategory::setFilterRules(QLatin1String("lCustomLog.debug=false"));

4.使用:通過qCDebug輸出  qCDebug(lCustomLog) << "this is a log !";

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章