Qt列印Log日誌到檔案

2021-07-31 22:41:41 字數 3226 閱讀 7064

寫軟體時有時候需要記錄日誌到檔案,方便檢視軟體執行資訊和排查問題,qt有自己的日誌列印功能,實現qt日誌功能需要用到下面的函式,其中qt4和qt5的函式有區別;

上面的函式是用來列印除錯資訊,警報資訊,危險資訊和致命資訊的。當qt有內部錯誤產生時,qt除錯庫會列印幾百種警報資訊(通常是異常的函式引數),qt以發布模式編譯也會包含這些警報資訊,除非在編譯的時候設定了qt_no_warning_output 和qt_no_debug_output 。訊息列印在x11 下預設輸出在標準輸出,在windows模式輸出在偵錯程式。如果是輸出的致命錯誤訊息,程式會立刻退出。

z在乙個程式中只能定義乙個訊息管理者,如果要恢復訊息管理, 呼叫qinstallmessagehandler(0)。

在 main函式中加入下面的呼叫函式:

#if qt_version < 0x050000

qinstallmsghandler(logmessageoutputqt4); //qt4

#else

qinstallmessagehandler(logmessageoutputqt5); //qt5

#endif

qt4列印,需要自己加入檔名,函式名和行號:

qdebug("[%s] [%s] [%d] this is a debug message", __file__, __function__, __line__);

qdebug("[%s] [%s] [%d] this is a warning message", __file__, __function__, __line__);

qdebug("[%s] [%s] [%d] this is a critical message", __file__, __function__, __line__);

qdebug("[%s] [%s] [%d] this is a fatal message", __file__, __function__, __line__);

qt5列印,列印的檔名、函式名和行號在下面的訊息處理函式中獲得:

qdebug("this is a debug message");

qwarning("this is a warning message");

qcritical("this is a critical message");

qfatal("this is a fatal message");

void logmessageoutputqt4(qtmsgtype type, const char *msg)

static qmutex mutex;

mutex.lock();

qstring text;

switch (type)

qstring message = qstring("[%1] %2 %3").arg(qdatetime::currentdatetime().tostring("yyyy-mm-dd hh:mm:ss")).arg(text).arg(msg);

qfile file("/home/sun/rootnfs/myqttest/log4.txt");

if (file.size() > max)

logfile.write(message.tolatin1(), message.count());

file.close();

file.remove();

logfile.close();

} else

mutex.unlock();

}

列印效果

[2017-05-11 16:15:46]

debug: [qttest/main.cpp]

[main]

[13]

thisisa

debug

message

[2017-05-11 16:15:46]

warning: [qttest/main.cpp]

[main]

[14]

thisisa

warning

message

[2017-05-11 16:15:46]

critical: [qttest/main.cpp]

[main]

[15]

thisisa

critical

message

void logmessageoutputqt5(qtmsgtype type, const qmessagelogcontext &context, const qstring &msg)

qstring message = qstring("[%1] %2 [%3] [%4] [%5] %6").arg(qdatetime::currentdatetime().tostring("yyyy-mm-dd hh:mm:ss"))

.arg(text).arg(context.file).arg(context.function).arg(context.line).arg(msg);

qfile file("/home/sun/rootnfs/myqttest/log5.txt");

if (file.size() > max)

logfile.write(message.tolatin1(), message.count());

file.close();

file.remove();

logfile.close();

} else

mutex.unlock();

}

列印效果

[2017-05-11

16:15:46] debug: [../qttest/main.cpp] [int main(int, char**)] [13] this is a debug message

[2017-05-11

16:15:46] warning: [../qttest/main.cpp] [int main(int, char**)] [14] this is a warning message

[2017-05-11

16:15:46] critical: [../qttest/main.cpp] [int main(int, char**)] [15] this is a critical message

Qt生成log日誌檔案

本文在qt程式中實現了日誌功能,讀者可以在此基礎上進一步創作和拓展 系統日誌一般指存放系統重要執行資訊的log.txt檔案,主要作用有兩個 1.記錄系統重要的執行資訊 2.當系統突然崩潰時,可以根據日誌來跟蹤和定位程式錯誤。qt 提供 qinstallmessagehandler qt5 或者qin...

log4j 列印異常日誌到檔案中

log4j.properties 定義 debug 優先順序,r 為日誌輸出目的的 測試 package com.zhongren.test import org.apache.log4j.logger public class test catch exception e 測試結果 配置錯誤級別 ...

PHP列印log日誌檔案,儲存資料到指定檔案中

在專案開發中,作為乙個後端開發人員肯定是要經常觀察日誌等記錄來查詢開發或上線的各種bug 分享乙個列印日誌記錄的方法 errorlog 列印錯誤日誌記錄 param type message 列印日誌記錄 param type file 日誌檔名 return type description fu...