使用log4qt在qt專案中記錄日誌

2021-06-13 10:14:07 字數 3264 閱讀 2030

log4qt是apache log4j專案用於qt框架的c++移植版本。單一開發者,年初發布0.2版本。

和其他系log4*不同,log4qt預設靜態編譯進目標程式。

使用:

1. 解壓log4qt到目標資料夾,如d:\qt\下;

2. qt專案的pro檔案中加入一行:include(d:\qt\log4qt\src\log4qt\log4qt.pri)

;pri檔案會將需要的h檔案和cpp檔案加入到qt專案中;

3. main.cpp中包含標頭檔案include "log4qt/propertyconfigurator.h",

log4j.properties符合log4j的配置檔案的風格;

4. 需要記錄日誌的檔案,標頭檔案中包含標頭檔案#include "log4qt/logger.h",

在q_object之後加入一行,log4qt_declare_qclass_logger,這樣就可以使用logger()->error("what?")記錄日誌了;

疑問:

接著就是在debug下新增log4j.properties配置檔案,詳細配置請參看

沒用過log4j和log4cxx,初次接觸log4qt,還真有點頭昏腦脹,無論如何,先簡單記錄一下。

log4qt 是apache log4j 的qt移植版,所以看log4j的資料應該是最直接有效的(因為log4qt的直接資料太少了)。

log4qt主要是用來記錄日誌(有助於程式除錯)。有3個主要的元件:

logger

提供日誌記錄服務,可以有多個logger存在,每個有它們自己的名字。logger間存在隸屬關係,有乙個logger稱為根logger。

用來指明將日誌記錄到什麼地方:比如,控制台、檔案、資料庫,等等

layout

控制日誌的輸出格式,可以模擬一下c中的printf哈。

乙個簡單的使用log4qt的qt程式:(使用基礎配置和根logger)

#include #include "logger.h"

#include "basicconfigurator.h"

int main(int argc, char *argv)

結果如下:

16 [0x00a56708] debug root  - hello dbzhang800!

16 [0x00a56708] info root - hello qt!

16 [0x00a56708] warn root - hello 1+1=2

稍微擴充一點,使用自己定義的logger

#include #include "logger.h"

#include "basicconfigurator.h"

class object

~object()

};int main(int argc, char *argv)

結果:

0 [0x00a56708] info object  - constructor

0 [0x00a56708] info object - destructor

在類object中,我們可以使用名為"object"的logger。恩,直接指定類名是可以的。可是我們現在在qt下啊。qt的元物件系統中包含類的名字,故爾我們可以直接使用。

用使用元物件系統,那麼必須使用q_object巨集,然後我們從元物件系統獲取類的名字,然後建立乙個相應的logger就行了。

不過log4qt,既然是為qt準備的,那麼就要為qt程式解憂嘛,也就是巨集

log4qt_declare_qclass_logger

這個巨集展開後成為該類的乙個成員函式,返回乙個logger,我們就可以直接使用了:

#include #include "logger.h"

#include "propertyconfigurator.h"

class object:public qobject

~object()

};#include "main.moc"

int main(int argc, char *argv)

程式的輸出結果如下:

2011-10-29 13:52:06 [object]-[info] constructor

2011-10-29 13:52:06 [object]-[info] destructor

注意,本例中,我們沒有使用預設配置,而是使用了乙個配置檔案log4qt.conf,放在了可執行程式所在目錄下面

log4j.rootlogger=debug,a1

額,沒錯,裡面的這些東西確實都是以log4j打頭的,所以需要看log4j的手冊來搞清楚這些東西:

配置a1,輸出到控制台

設定a1採用的layout,並設定其具體格式

我是不是太了解,簡單整理一下:

配置根logger

其語法

其中:

off關閉所有日誌輸出

fatal

error

建議使用的幾個級別?,高於指定級別的日誌才被輸出

warn

info

debug

trace

all所有日誌均輸出

注:除rootlogger外,還可以對各個logger分別設定 語法

...

控制台 檔案

每天產生乙個日誌檔案

檔案大小到達指定尺寸的時候產生乙個新的檔案 語法

…其中:

log4j提供的layout有

org.apache.log4j.htmllayout

以html**形式布局

org.apache.log4j.patternlayout

可以靈活地指定布局模式

org.apache.log4j.******layout

包含日誌資訊的級別和資訊字串

org.apache.log4j.ttcclayout

包含日誌產生的時間、執行緒、類別等等資訊

格式控制符: %m

輸出**中指定的訊息

%p輸出優先順序,即debug,info,warn,error,fatal

%c輸出logger的名字,通常就是所在類的全名

%n輸出乙個回車換行符

%d輸出時間,預設格式為iso8601,也可以指定格式,比如:%d,類似:2023年10月28日 14:10:28

log4qt整合使用

git clone2.配置 qt裡面建專案如myproject,複製log4qt src下面的log4qt目錄到新建專案裡面,例如複製到專案的跟目錄,我這邊的目錄結構是myproject裡面放的是新建的專案,myproject log4qt是log4qt的原始碼。開啟myproject.pro專案配...

Qt使用Log4Qt寫日誌

log4qt 是apache log4j 的qt移植版 官網 首先初始化log4qt,設定配置檔案和訊息繫結 log4qt propertyconfigurator configure qtlog4qt.conf log4qt logmanager sethandleqtmessages true ...

Log4Qt使用筆記 三

在前面,我們提到,除了乙個根root之外,還可以有多個命名的logger存在,為了直觀,我們可以看logmanager的成員函式 奇怪,除了我們提到的,還有qtlogger和loglogger兩個東西存在,這兩個是什麼東西?原來 馬甲 真實身份 作用qtlogger logger qt 用來處理qt...