02.29 為什麼選擇 Log4Qt


在《C++ 日誌框架》一文中,我們介紹了一些主流的 C++ 日誌框架。至於選擇哪一個,可以參考該文中的 日誌選擇標準 小節內容。

對於很多人來說,第一選擇會是 Log4cpp、log4cplus、log4cxx、Log4Qt 中的一個,因為它們均移植自 Java 中著名的日誌框架 - Log4j,並且保持了 API 上的一致。


為什麼選擇 Log4Qt

通過使用 Log4j,我們可以:

  • 控制日誌的輸出格式;
  • 通過定義日誌信息的級別,來更加細緻地控制日誌的生成過程;
  • 控制日誌信息的輸出位置,例如:文件、控制檯、數據庫等;
  • ……

最不可思議的是,這些都可以通過配置文件來靈活地控制,而無需修改源代碼。

使用 Log4j 系列的最大好處在於,只要熟練掌握其中一個,其它的幾個都可以信手拈來。即使是不同的語言環境,配置也不會有太大區別,並且使用方式也相當簡單。

衍生品這麼多,最終我選擇了 Log4Qt,原因很簡單:我的第一身份是 Qter。其實選擇哪個都無所謂,因為它們是一家,而我們主要是 學習 Log4j 的思想。

Log4Qt 簡介

Log4Qt 是 Apache Log4j 的 Qt 移植版,主要用於記錄日誌。

由於 Log4Qt 是基於 Qt 編寫的,所以它也繼承了 Qt 的跨平臺特性。也就是說,可以將其用於 Windows、Linux、以及 MacOS 平臺上。

  • 主頁:http://log4qt.sourceforge.net
  • 文檔:http://log4qt.sourceforge.net/html/index.html

由於 Log4Qt 的開發在 2009 年就終止了,所以其官網提供的源碼 僅支持 Qt4:

  • for Qt4:https://sourceforge.net/projects/log4qt

但值得慶祝的是,有人提供了一個 兼容 Qt5 的版本:

  • for Qt5:https://github.com/MEONMedical/Log4Qt

這個升級版很棒,不但可以將 Log4Qt 源碼添加至項目中,而且還可以將其編譯為庫,並且它還同時支持 CMake 和 qmake。

最重要的是,它還在持續升級,並且在老版本(for Qt4)的基礎上添加了很多新 Feature。

Log4Qt 分層架構

Log4Qt API 設計為 分層結構,其中每一層提供了執行不同任務的不同對象,這種設計為未來的發展提供了很好的可擴展性。

Log4Qt 對象分為:

  • 核心對象:使用框架必不可少的強制性對象。
  • 支持對象:幫助核心對象完成重要的任務。


為什麼選擇 Log4Qt

核心對象:

  • Logger 對象:處於最上層,負責捕獲日誌信息。
  • Appender 對象:負責將日誌信息輸出到各種目的地,例如:控制檯、文件、數據庫等。
  • Layout 對象:用於控制日誌輸出格式,該層有助於以可讀形式記錄信息。

支持對象:

  • Level 對象:定義日誌信息的優先級:TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
  • LogManager:負責從配置文件或配置類中讀取初始配置參數。
  • Filter 對象:用於分析日誌信息,並進一步決定是否需要記錄信息。
  • ObjectRenderer:用於向傳遞的各種 Logger 對象提供字符串表示(在 Log4Qt 中,尚未用到)。

編譯 Log4Qt

下載 Log4Qt(for Qt5),進行解壓縮,目錄結構如下所示:

為什麼選擇 Log4Qt

可以看到,同時支持 CMake 和 qmake。其中,src 是需要特別關注的目錄,裡面包含了 Log4Qt 的所有源碼。

由於代碼結構已經組織好了,所以編譯 Log4Qt(以 Windows 為例)非常簡單:

  • 使用 Qt Creator 打開 log4qt.pro。
  • 執行 qmake -> 構建。

成功之後,在構建目錄下會生成 log4qt.lib、log4qt.dll 以及相應的示例程序。

配置 Log4Qt

要使用 Log4Qt,有兩種方式:將 Log4Qt 源碼添加至項目中,或者將其當做第三方庫來使用。

將 Log4Qt 源碼添加至項目中

在 Log4Qt-master/src/log4qt 目錄中,有一個很重要的文件 - log4qt.pri,通過它可以很容易地 將 Log4Qt 的源碼添加至項目中。

僅需在 .pro(自己的工程文件)添加如下配置:

為什麼選擇 Log4Qt


將 Log4Qt 作為第三方庫使用

上面說過,編譯 Log4Qt 後,會生成相應的庫。所以如果想 將其作為第三方庫來使用 的話,也很方便。

僅需在 .pro(自己的工程文件)添加如下配置:


為什麼選擇 Log4Qt


分享到:


相關文章: