Windows10下編譯使用log4cxx

在開發過程中,log的重要性自不必說。與google的glog比起來,apache軟件基金會的log更爲全面,可以稱之爲日誌系統。.Net有log4net,Java有log4j,C/C++有log4cxx。最爲方便的是可以在代碼和專門的配置文件中自定義日誌的格式,日誌文件名稱,以及產生日誌文件的規則等等。比如最常用的限制每個日誌文件的大小、按照日期產生日誌等功能。

 

之前用的時候就按照網上的提示,按部就班編譯了一版log4cxx。但在實際使用場景中,碰到了unicode字符,寬字符和普通字符的問題。因此就想按照自己的需求編譯一版。

搜遍國內外的信息,都沒有找到如何順利的自定義編譯。折騰了一整天,總算有了初步的感覺。特此分享給大家,避免需要的同學重複造輪子浪費時間。

 

環境:

Windows10家庭中文版

Microsoft Visual Studio Community 2017

Windows SDK 版本10.0.17134.0

 

1,下載log4cxx

apache軟件基金會官網上就能下載到最新版

https://logging.apache.org/log4cxx/latest_stable/download.html

目前能下載到的最新版本號是0.10.0

 

2,下載apr和apr-util

按照官網上的VS編譯log4cxx的提示,需要下載apr-1.2.11和apr-util-1.2.10。注意版本匹配,並不是越新的版本越好。

apr-1.2.11-win32-src.zip 和 apr-util-1.2.10-win32-src.zip

下載地址:

https://archive.apache.org/dist/apr/

3,下載sed和幾個在windows下運行sed需要的dll。

sed for windows

下載地址:

https://sourceforge.net/projects/gnuwin32/files//sed/4.2.1/sed-4.2.1-bin.zip/download

在windows下運行sed可能還需要3個dll

libiconv2.dll、libintl3.dll、regex2.dll

這個搜一下很容易下載到。

 

4,解壓,建好目錄

分別將下載好的apache-log4cxx-0.10.0.zip、apr-1.2.11-win32-src.zip、apr-util-1.2.10-win32-src.zip解壓到同一個目錄下,並按照官網說明,將apr-1.2.11的目錄重命名爲apr,apr-util-1.2.10目錄重命名爲apr-util。注意,這兩個目錄進去都直接是項目和源文件。

然後將sed.exe、libiconv2.dll、libintl3.dll、regex2.dll都放到apache-log4cxx-0.10.0目錄下。

 

5,根據需要修改log4cxx.hw和apr.hw(重要)

根據.hw中的提示,最好不要直接修改log4cxx.h和apr.h,因爲過會要執行的兩個批處理configure.bat和configure-aprutil.bat會自動判斷設置是否正確並複製爲log4cxx.h和apr.h。

log4cxx.hw所在目錄apache-log4cxx-0.10.0\src\main\include\log4cxx

首先根據自己所需的環境設置字符集

其次,由於VS2010開始不能在類內部定義模板,需要將下面兩個方框中的內容刪除。

arp.hw所在目錄在apr\include,有一處需要修改

因原本定義爲NT4的值0x400,會導致group_source_req未定義等錯誤。將版本定義爲當前windows版本對應的值即可。該值在windows10SDK的sdkddkver.h頭文件中有定義。

這裏改爲_WIN32_WINNT_WIN10即可。

 

6,修改apr_atomic.c

apr_atomic.c所在目錄apr\atomic\win32

將所有InterlockedXxx函數前面的強制轉換類型去掉即可,記得每個調用都需要改。

 

7,VS項目設置

打開apache-log4cxx-0.10.0\projects\log4cxx.dsw項目文件,轉換完成後共有4個項目。

將log4cxx設置爲啓動項目。

然後將這4個項目的每一個屬性中的Windows SDK 版本都設置爲10.0.17134.0。

同時將項目設置成Release。

 

8,編譯

到這裏,準備工作都已完成。可以開始編譯了。

不用在意出現的警告,編譯完成後在apache-log4cxx-0.10.0\projects\Release目錄下找到庫文件

log4cxx.lib,log4cxx.dll。將這兩個文件和apache-log4cxx-0.10.0\src\main\include\目錄下的log4cxx目錄一起復製出來,在想要使用log的項目中導入就可以使用了。

 

9,配置

log4cxx的配置文件默認的擴展名是.properties,在apache-log4cxx-0.10.0目錄下搜索*.properties,可以看到很多例子。

這裏用日期作爲log名稱,log同時輸出控制檯和文件。

記錄的信息格式由ConversionPattern定義。每個關鍵字的含義在圖中已註釋

 

10,使用示例代碼

先讀取配置文件logconfig.properties,然後即可開始使用LOG4CXX_INFO、LOG4CXX_DEBUG等宏記錄log。

如果程序沒有找到配置文件logconfig.properties,就用默認的BasicConfigurator進行默認的定義。

 

至此,log4cxx即可使用了。

編譯好的lib,dll,頭文件,以及示例代碼將會上傳到下載區。