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,头文件,以及示例代码将会上传到下载区。