說來慚愧,一直以來,我都是使用乙個單例模式來完成日誌模組,具體操作就是呼叫單例的寫檔案函式,自己編輯日誌內容,記錄在日誌檔案裡。
這種做法不利於查詢除錯。而使用qt內建的qinstallmessagehandler函式,重新編輯除錯函式的輸出內容才是簡單高效的做法。
名字很高大上,其實大家都在使用的qdebug()就是。
qdebug() – 除錯資訊輸出;
qinfo() – 資訊訊息;
qwarning() – 警告訊息和可恢復的錯誤;
qcritical() – 關鍵錯誤和系統錯誤;
qfatal() – 致命錯誤。
一共有五類,用法和qdebug()一致。需要特別說明的只有qfatal(),每當程式執行到這句話時會自動報錯並終止。
乙個工程專案會出現很多的除錯資訊和日誌資訊,供我們查詢除錯,如果能提供資訊所在的檔案、函式和行號,那就太方便了。
下面,我們就可以使用qt內建的qinstallmessagehandler函式在自定義訊息處理,通過各除錯級別的資訊輸出,直接輸出到螢幕並記錄到日誌檔案。
//自定義訊息處理函式
void mymessageoutput(qtmsgtype type, const qmessagelogcontex &context, const qstring &msg)
strmessage = strmsg + strmessage;
//加鎖輸出檔案
static qmutex mutex;
mutex.lock();
qfile file("d:\\log.txt");
qtextstream stream(&file);
stream << strmessage << "\r\n";
file.flush();
file.close();
mutex.unlock();
//同時用系統原來的函式完成輸出列印
if(gdefaulthandler) }
int main(int argc, char **ar**)
介面輸出的內容如下:
this is a debug msg.this is a info msg.
this is a warning msg.
this is a critical msg.
檔案記錄的內容如下:
debug 2019-07-03 10:59:32 file:…\logmsg\main.cpp line:74 function:int __cdecl main(int,char *)this is a debug msg.
info 2019-07-03 10:59:32 file:…\logmsg\main.cpp line:75 function:int __cdecl main(int,char *)
this is a info msg.
warning 2019-07-03 10:59:32 file:…\logmsg\main.cpp line:76 function:int __cdecl main(int,char *)
this is a warning msg.
critical 2019-07-03 10:59:32 file:…\logmsg\main.cpp line:77 function:int __cdecl main(int,char *)
this is a critical msg.
release版本預設不包含檔名、函式名和行數資訊,需要在.pro檔案中加入一行**,重新make執行後生效。
defines += qt_messagelogcontext
Python模組學習 logging 日誌記錄
python的logging模組提供了記錄程式運 況的日誌功能,類似於apache的log4j 許多應用程式中都會有日誌模組,用於記錄系統在執行過程中的一些關鍵資訊,以便於對系統的執行狀況進行跟蹤。在.net平台中,有非常著名的第三方開源日誌元件log4net,c 中,有人們熟悉的log4cpp,而...
Mac下 lua C模組的編寫
我們已經看到如何在c檔案中使用lua register註冊lua可以使用的函式,也了解了c函式和lua函式之間如何傳遞引數。再提公升一步,我們還可以將一組c函式組成乙個模組交給lua環境使用。看具體的例子 mylualib.c include include include static int h...
windows下嘗試編寫node模組
1,首先參考寫了乙個模組 2,按照指引執行 f program files nodejs mymodule node gyp configure build 奶奶的,一開始就少了乙個node gyp,上網一艘,原來這也是乙個模組 node gyp 不是內部或外部命令,也不是可執行的程式 或批處理檔案...