有没有比较好用的LOG记录C++类, 推荐一个,谢谢 有没有比较好用的LOG记录C++类, 推荐一个,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用log4cxx吧,跨平台的,哪都能用,不过不是一个C++类,而是一个类库。 摘要Log4cxx是开放源代码项目Apache Logging Service的子项目之一,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。本文对log4cxx的使用及配置进行介绍,并给出一个可以快速开始的实例。最后,针对日志服务给出一些实践方面的建议。1. 介绍Log4cxx是开放源代码项目Apache Logging Service的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。有关log4cxx的更多信息可以从Apache Loggin Service的网站http://logging.apache.org获得。当前的稳定版本为0.9.7,本文内容及示例代码都是基于此版本。此外,示例代码的编译环境为Windows环境中的Microsoft Visual C++ .Net 2003。本文的示例代码可以在此下载,其中也包含了预编译好的log4cxx的库文件。2. 集成log4cxx到IDE要使用log4cxx,首先需要将其集成到你的项目开发环境中。以下针对Windows环境中的Microsoft Visual C++ .Net 2003进行说明,其他环境的配置信息请参考官方文档。要让log4cxx为你工作,通常情况下需要如下几个步骤:l 获取软件包:得到log4xx的源代码;l 编译:构建库文件;l 项目环境设置:加入log4cxx支持。2.1 获取软件包请从官方网站获得合适的版本。也可以从下面这个链接中直接获取(直接的链接地址可能不会永远有效):http://mirror.vmmatrix.net/apache/logging/log4cxx/log4cxx-0.9.7.tar.gz下载完成后解压缩到合适的目录中,因为我们在下一步中需要使用软件包,包括编译和复制必要的文件。2.2 编译原始发行包中不含编译后的代码,这个工作需要我们自己来做。打开你的IDE,并加载以下目录中的工程:l Msvc\static:该工程产生log4cxx的静态链接库(lib4cxx.lib和lib4cxxs.lib);l Msvc\dll:该工程产生log4cxx的动态链接库(lib4cxx.dll)。通常情况下,工程都可以顺利编译通过。查看输出目录,把这些生成的库文件找出来,以便在下一步骤中使用。2.3 项目环境设置请先在IDE中打开一个需要加入日志功能的工程,或者出于实验目的,新建一个工程,以便对其进行设置。首先需要设置log4cxx的include文件。这些文件位于log4cxx软件包的include\log4cxx目录内。请查看你的VC++ IDE中“工具->选项->项目->VC++目录->包含文件”所列出的内容,以便确定你以何种方式加入这些include文件:l 将include\log4cxx直接拷贝到已定义的包含文件目录中。如果将log4cxx看作是一项系统服务的话,这样做是胡合乎情理的,因为你可以采用标准库的方式使用它,例如:#include <log4cxx/logger.h>l 增加一个包含路径,以指向位于IDE外部的某一文件目录。可以简单的指向在2.1中解压缩后形成的log4cxx软件包目录。下一步需要对2.2节产生的log4cxx库进行设置。这取决于你使用该库的方式:静态链接或者动态链接。l 静态链接情况下需要做如下工作:为预编译器定义LOG4CXX_STATIC 宏,设置位置为“项目->属性->配置属性->C/C++->预处理器->预处理器定义”;为链接器指定依赖的库 lib4cxxs.lib和Ws2_32.lib,设置位置为“项目->属性->配置属性->链接器->输入->附加依赖项”。l 动态链接情况下只需要为链接器指定依赖的库lib4cxxs.lib即可,设置方式同上。3. 示例代码本节展示了一个最简单的log4cxx示例,以便你可以快速的了解它。该示例在功能上创建了一个日志服务,该日志可通过配置文件进行必要控制,并可以同时向文件和控制台输出信息。在实现上,我们采用了一个简单的控制台程序,并使用动态链接库的方式使用log4cxx。要实现这个目标,请按如下步骤进行:1)创建一个名为logdemo的空白win32控制台工程,并按照2.3节所述内容对其进行设置。注意,这里我们使用动态连接口的方式。2)在logdemo.cpp中加入实现日志功能的代码。完成后的代码清单如下: #include "stdafx.h"#include <log4cxx/logger.h>#include <log4cxx/propertyconfigurator.h> using namespace log4cxx; int _tmain(int argc, _TCHAR* argv[]){ //加载log4cxx的配置文件,这里使用了属性文件 PropertyConfigurator::configure("log4cxx.properties"); //获得一个Logger,这里使用了RootLogger LoggerPtr rootLogger = Logger::getRootLogger(); //发出INFO级别的输出请求 LOG4CXX_INFO(rootLogger, _T("它的确工作了"));//rootLogger->info(_T("它的确工作了")); //与上面那句话功能相当 return 0;}以Debug方式编译工程,调试程序直到成功为止。3)新建一个文本文件,命名为log4cxx.properties,并键入如下内容: # 设置root logger为DEBUG级别,使用了ca和fa两个Appenderlog4j.rootLogger=DEBUG, ca, fa #对Appender fa进行设置:# 这是一个文件类型的Appender,# 其输出文件(File)为./output.log,# 输出方式(Append)为覆盖方式,# 输出格式(layout)为PatternLayoutlog4j.appender.fa=org.apache.log4j.FileAppender log4j.appender.fa.File=./output.loglog4j.appender.fa.Append=falselog4j.appender.fa.layout=org.apache.log4j.PatternLayout log4j.appender.fa.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n #对Appender ca进行设置:# 这是一个控制台类型的Appender# 输出格式(layout)为PatternLayoutlog4j.appender.ca=org.apache.log4j.ConsoleAppender log4j.appender.ca.layout=org.apache.log4j.PatternLayout log4j.appender.ca.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n4)复制log4cxx.dll到输出目录。在动态链接方式下,应用程序需要能够找到这个库文件。5)运行生成的logdemo.exe文件,查看一下运行结果,看看我们工作有没有取得成效。如果一切顺利,无论是在控制台还是在输出文件中,都应该能看到类似下面那样的输出内容: 2006-06-02 16:09:50,609 [2528] INFO root - 它的确工作了4. 体系结构4.1 核心类Log4cxx有三个关键组件,它们是loggers, appenders和layouts。Logger是log4cxx的核心类,只要执行日志操作;looger有层次结构,最顶层为RootLogger;logger是有级别的。每个logger可以附加多个Appender。Appender代表了日志输出的目标,如输出到文件、控制台等等。对于每一种appender,都可以通过layout进行格式设置。这三类组件用示意图表示如下(不代表类关系):(TODO:在此对三种组件分别进行说明)4.2 配置类此外在使用中还会用到的类有BasicConfigurator、PropertyConfigurator和DOMConfigurator等,用于对log4cxx进行配置。其中:BasicConfigurator提供了一种简单配置,包括使用ConsoleAppder作为root appender和PatternLayout作为缺省布局。PropertyConfigurator使用properties文件作为配置方式。DOMConfigurator则使用properties文件作为配置方式。(TODO:在此对配置内容进行说明)5. 实践指导在项目中是否使用日志,以及如何使用日志,对开发者来说都是一个需要做出的技术选择,这通常会牵扯到系统的性能,使用日志的目的等问题。我们使用日志的方式,有些是这个行业积累了多年的经验,有些则纯粹关乎个人的喜好。1)何时使用日志通常情况下,日志的作用在于调试和审计,如果你的项目对此有特殊需求,即可考虑使用日志。对于调试,通常用于IDE调试器无法达到的地方。一些常见的场景包括:分布式组件的调试。在服务器端的组件,需要通过客户端的调用来验证其工作是否正确,此时利用日志的输出作为辅助工具对错误进行诊断。链接库调试。在无法跟踪进外部库中的情况下,这种方法非常有效。生产环境下的调试。生产环境通常是指产品在客户处处于正式运行的状态,在出现问题时,开发者常常不在现场,借助日志的输出进行错误判断就是一个非常有效的手段。对于审计应用,则需要视特定的情况而定,程序级的记录能力,无疑可以作为业务级审计手段的有效补充。无论是在哪种场景下,log4cxx都是可以胜任工作的,这取决于它的灵活的配置能力及多种类型的输出方式。2)性能问题关闭日志,通过配置文件设置日志的关闭和打开使用宏代替logger的输出命令选择性输出日志。建立logger的层次结构,根据级别选择性输出输出目标。尽可能减少输出目标选择合适的输出格式。使用SimpleLayout将达到与std::cout相当的速度。3)其它使用类的全限定名对logger命名6. 结论Log4cxx具有的一些显著特性使得C++者可以将其放入自己的工具箱中,这些特性包括灵活的配置能力,多种输出手段,丰富的格式控制,出色的性能。如果在你的开发中需要借助于日志进行调试和审计,你也许需要log4cxx。最后,重要的一点是,如你所见,log4cxx的使用是如此的简单。 Log4cxx是开放源代码项目Apache Logging Service的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。有关log4cxx的更多信息可以从Apache Loggin Service的网站http://logging.apache.org获得。当前的最新版本为0.10.0,本文内容及示例代码都是基于此版本。2.获取软件包 可以从官方网站(http://logging.apache.org/log4cxx/index.html)获取源代码,下载版本为apache-log4cxx-0.10.0,下载完成后解压缩到合适目录3.编译 下载的原始文件包中没有包含编译后的开发库,需要自己编译生成,本文使用vc.net2003编译该源文件,编译时需要如下文件包: apr-1.2.11-win32-src.zip和apr-util-1.2.10-win32-src.zip这两个压缩包的下载地址分别如下: http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip http://archive.apache.org/dist/apr/apr-util-1.2.10-win32-src.zip下载完成后将这两个文件分别解压缩到和上面源代码相同的目录下。然后按照如下步骤进行编译:a. 将apr-1.2.11-win32-src.zip解压后的文件名修改为:aprb. 将apr-util-1.2.10-win32-src.zip解压后的文件名修改为:apr-utilc. 通过vc.net2003的DOS工具进入DOS窗口,此处直接在运行命令栏中输入cmd也可,不过为安全起见最后从.net2003的工具栏进入DOS界面d. 使用cd 命令进入apache-log4cxx-0.10.0目录e. 输入configure命令,执行configure.bat批处理文件f. 输入configure-aprutil命令,执行configure-aprutil.bat批处理文件。注意:由于在configure-aprutil.bat文件中使用了linux下的sed命令,所以该步可能会出现类似找不到sed命令的错误,这是由于在windows环境下编译的缘故。可以使用如下两种方法解决:1.下载一个sed for windows的工具;2.使用Cygwin;不过本人强烈推荐使用第二种方法,因为有些sed for windows的工具存在bug。关于如何在windows环境下安装Cygwin请看文章后名说明。g. 使用vc.net2003打开Projects文件夹下的log4cxx.dsw项目,将log4cxx工程设为启动项目,然后编译即可h. 编译成功后,就可以在projects的Debuge或者Release文件夹下看到lib和dll文件4.项目环境设置 有两种方法可以设置环境:通过.net2003的工具栏或者使用工程属性栏配置,这里只介绍第二种,本文将通过下面的实例程序介绍如何使用第二种方法设置环境5.实例代码 a.打开.net2003,新建一个空白的win32控制台工程,假设工程名为Test b.添加一个cpp文件,文件名随便命名 c.右键点击Test工程,选择”属性”,然后在C++选项卡中添加附加库目录,注意该目录为../ apache-log4cxx-0.10.0\src\main\include d.在属性的链接器输入选项卡的”附加依赖项”中添加” log4cxx.lib” e.在cpp文件中输入如下测试代码: #include <log4cxx/logger.h> #include <log4cxx/PropertyConfigurator.h> using namespace std; using namespace log4cxx; int main(int argc, char* argv[]) { string trace = "fa"; string Property = "./log.properties"; log4cxx::PropertyConfigurator::configure(Property); LoggerPtr logger = Logger::getLogger(trace); logger->info(("How to use?")); LOG4CXX_INFO(logger, ("你说hello")); for(int i = 0; i < 2; i++) { LOG4CXX_DEBUG(logger, "DEBUG"); LOG4CXX_INFO(logger, "INFO"); LOG4CXX_WARN(logger, "WARN"); LOG4CXX_ERROR(logger, "ERROR"); } return 0; } f.新建一个文本文件,命名为log4cxx.properties,并键入如下内容: # 设置root logger为DEBUG级别,使用了ca和fa两个Appender log4j.rootLogger=DEBUG, ca, fa #对Appender fa进行设置: # 这是一个文件类型的Appender, # 其输出文件(File)为./output.log, # 输出方式(Append)为覆盖方式, # 输出格式(layout)为PatternLayout log4j.appender.fa=org.apache.log4j.FileAppender log4j.appender.fa.File=./output.log log4j.appender.fa.Append=false log4j.appender.fa.layout=org.apache.log4j.PatternLayout log4j.appender.fa.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n #对Appender ca进行设置 # 这是一个控制台类型的Appender # 输出格式(layout)为PatternLayout log4j.appender.ca=org.apache.log4j.ConsoleAppender log4j.appender.ca.layout=org.apache.log4j.PatternLayout log4j.appender.ca.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n g. 将编译好的log4cxx.lib和log4cxx.dll及上面的log4cxx.properties文件拷贝之Test工程目录 h.编译运行该文件,可以看到控制台输出相关日志,并且在工程目录下会得到一个output.log的日志文件6.补充说明 上面的log4cxx.properties文件为log4xxx的配置文件,该文件主要用来设置该如何生成日志文件及日志文件的格式等信息,关于配置文件的说明可以参考如下文档:http://fanqiang.chinaunix.net/app/other/2006-06-22/4640.shtml7.Cygwin的安装 关于Cygwin的安装可以参考如下说明http://www.cygwin.cn/site/install/。假设安装目录为D:\cygwin,安装成功后需要设置一下环境变量,可按如下步骤设置环境变量:a. 右键点击我的电脑->属性->高级->环境变量b. 在下面的系统变量中选择Path变量,在最后面添加D:\cygwin\bin即可 线程里访问方式 该如何实现快速查找一个程序的目录? Debug Assertion Failed!! 关于用VirtualAlloc的内存管理问题, 变量的堆栈怎么在退出的时候会提示被污染? 程序员转做淘宝推广怎么样 ¥¥送分,如何在CDoc/view中禁用toolbar,是指根本不显示¥¥ 帮忙看看http://www.csdn.net/Expert/topic/487/487778.shtm LPSTR和CString 转换问题 vc++怎样实现模糊查询 腾讯是如何支持庞大的用户群的登录? 关于GDI+中Image::save
摘要
Log4cxx是开放源代码项目Apache Logging Service的子项目之一,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。本文对log4cxx的使用及配置进行介绍,并给出一个可以快速开始的实例。最后,针对日志服务给出一些实践方面的建议。
1. 介绍
Log4cxx是开放源代码项目Apache Logging Service的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。
有关log4cxx的更多信息可以从Apache Loggin Service的网站http://logging.apache.org获得。当前的稳定版本为0.9.7,本文内容及示例代码都是基于此版本。此外,示例代码的编译环境为Windows环境中的Microsoft Visual C++ .Net 2003。
本文的示例代码可以在此下载,其中也包含了预编译好的log4cxx的库文件。
2. 集成log4cxx到IDE
要使用log4cxx,首先需要将其集成到你的项目开发环境中。以下针对Windows环境中的Microsoft Visual C++ .Net 2003进行说明,其他环境的配置信息请参考官方文档。
要让log4cxx为你工作,通常情况下需要如下几个步骤:
l 获取软件包:得到log4xx的源代码;
l 编译:构建库文件;
l 项目环境设置:加入log4cxx支持。
2.1 获取软件包
请从官方网站获得合适的版本。也可以从下面这个链接中直接获取(直接的链接地址可能不会永远有效):
http://mirror.vmmatrix.net/apache/logging/log4cxx/log4cxx-0.9.7.tar.gz
下载完成后解压缩到合适的目录中,因为我们在下一步中需要使用软件包,包括编译和复制必要的文件。
2.2 编译
原始发行包中不含编译后的代码,这个工作需要我们自己来做。打开你的IDE,并加载以下目录中的工程:
l Msvc\static:该工程产生log4cxx的静态链接库(lib4cxx.lib和lib4cxxs.lib);
l Msvc\dll:该工程产生log4cxx的动态链接库(lib4cxx.dll)。
通常情况下,工程都可以顺利编译通过。查看输出目录,把这些生成的库文件找出来,以便在下一步骤中使用。
2.3 项目环境设置
请先在IDE中打开一个需要加入日志功能的工程,或者出于实验目的,新建一个工程,以便对其进行设置。
首先需要设置log4cxx的include文件。这些文件位于log4cxx软件包的include\log4cxx目录内。请查看你的VC++ IDE中“工具->选项->项目->VC++目录->包含文件”所列出的内容,以便确定你以何种方式加入这些include文件:
l 将include\log4cxx直接拷贝到已定义的包含文件目录中。如果将log4cxx看作是一项系统服务的话,这样做是胡合乎情理的,因为你可以采用标准库的方式使用它,例如:#include <log4cxx/logger.h>
l 增加一个包含路径,以指向位于IDE外部的某一文件目录。可以简单的指向在2.1中解压缩后形成的log4cxx软件包目录。
下一步需要对2.2节产生的log4cxx库进行设置。这取决于你使用该库的方式:静态链接或者动态链接。
l 静态链接情况下需要做如下工作:为预编译器定义LOG4CXX_STATIC 宏,设置位置为“项目->属性->配置属性->C/C++->预处理器->预处理器定义”;为链接器指定依赖的库 lib4cxxs.lib和Ws2_32.lib,设置位置为“项目->属性->配置属性->链接器->输入->附加依赖项”。
l 动态链接情况下只需要为链接器指定依赖的库lib4cxxs.lib即可,设置方式同上。
3. 示例代码
本节展示了一个最简单的log4cxx示例,以便你可以快速的了解它。
该示例在功能上创建了一个日志服务,该日志可通过配置文件进行必要控制,并可以同时向文件和控制台输出信息。
在实现上,我们采用了一个简单的控制台程序,并使用动态链接库的方式使用log4cxx。
要实现这个目标,请按如下步骤进行:
1)创建一个名为logdemo的空白win32控制台工程,并按照2.3节所述内容对其进行设置。注意,这里我们使用动态连接口的方式。
2)在logdemo.cpp中加入实现日志功能的代码。完成后的代码清单如下:
#include "stdafx.h"
#include <log4cxx/logger.h>
#include <log4cxx/propertyconfigurator.h>
using namespace log4cxx;
int _tmain(int argc, _TCHAR* argv[])
{
//加载log4cxx的配置文件,这里使用了属性文件
PropertyConfigurator::configure("log4cxx.properties");
//获得一个Logger,这里使用了RootLogger
LoggerPtr rootLogger = Logger::getRootLogger();
//发出INFO级别的输出请求
LOG4CXX_INFO(rootLogger, _T("它的确工作了"));
//rootLogger->info(_T("它的确工作了")); //与上面那句话功能相当
return 0;
}
以Debug方式编译工程,调试程序直到成功为止。
3)新建一个文本文件,命名为log4cxx.properties,并键入如下内容:
# 设置root logger为DEBUG级别,使用了ca和fa两个Appender
log4j.rootLogger=DEBUG, ca, fa
#对Appender fa进行设置:
# 这是一个文件类型的Appender,
# 其输出文件(File)为./output.log,
# 输出方式(Append)为覆盖方式,
# 输出格式(layout)为PatternLayout
log4j.appender.fa=org.apache.log4j.FileAppender
log4j.appender.fa.File=./output.log
log4j.appender.fa.Append=false
log4j.appender.fa.layout=org.apache.log4j.PatternLayout
log4j.appender.fa.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n
#对Appender ca进行设置:
# 这是一个控制台类型的Appender
# 输出格式(layout)为PatternLayout
log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n
4)复制log4cxx.dll到输出目录。在动态链接方式下,应用程序需要能够找到这个库文件。
5)运行生成的logdemo.exe文件,查看一下运行结果,看看我们工作有没有取得成效。如果一切顺利,无论是在控制台还是在输出文件中,都应该能看到类似下面那样的输出内容:
2006-06-02 16:09:50,609 [2528] INFO root - 它的确工作了
4. 体系结构
4.1 核心类
Log4cxx有三个关键组件,它们是loggers, appenders和layouts。
Logger是log4cxx的核心类,只要执行日志操作;looger有层次结构,最顶层为RootLogger;logger是有级别的。每个logger可以附加多个Appender。Appender代表了日志输出的目标,如输出到文件、控制台等等。对于每一种appender,都可以通过layout进行格式设置。
这三类组件用示意图表示如下(不代表类关系):
(TODO:在此对三种组件分别进行说明)
4.2 配置类
此外在使用中还会用到的类有BasicConfigurator、PropertyConfigurator和DOMConfigurator等,用于对log4cxx进行配置。其中:
BasicConfigurator提供了一种简单配置,包括使用ConsoleAppder作为root appender和PatternLayout作为缺省布局。
PropertyConfigurator使用properties文件作为配置方式。
DOMConfigurator则使用properties文件作为配置方式。
(TODO:在此对配置内容进行说明)
5. 实践指导
在项目中是否使用日志,以及如何使用日志,对开发者来说都是一个需要做出的技术选择,这通常会牵扯到系统的性能,使用日志的目的等问题。我们使用日志的方式,有些是这个行业积累了多年的经验,有些则纯粹关乎个人的喜好。
1)何时使用日志
通常情况下,日志的作用在于调试和审计,如果你的项目对此有特殊需求,即可考虑使用日志。
对于调试,通常用于IDE调试器无法达到的地方。一些常见的场景包括:
分布式组件的调试。在服务器端的组件,需要通过客户端的调用来验证其工作是否正确,此时利用日志的输出作为辅助工具对错误进行诊断。
链接库调试。在无法跟踪进外部库中的情况下,这种方法非常有效。
生产环境下的调试。生产环境通常是指产品在客户处处于正式运行的状态,在出现问题时,开发者常常不在现场,借助日志的输出进行错误判断就是一个非常有效的手段。
对于审计应用,则需要视特定的情况而定,程序级的记录能力,无疑可以作为业务级审计手段的有效补充。
无论是在哪种场景下,log4cxx都是可以胜任工作的,这取决于它的灵活的配置能力及多种类型的输出方式。
2)性能问题
关闭日志,通过配置文件设置日志的关闭和打开
使用宏代替logger的输出命令
选择性输出日志。建立logger的层次结构,根据级别选择性输出
输出目标。尽可能减少输出目标
选择合适的输出格式。使用SimpleLayout将达到与std::cout相当的速度。
3)其它
使用类的全限定名对logger命名
6. 结论
Log4cxx具有的一些显著特性使得C++者可以将其放入自己的工具箱中,这些特性包括灵活的配置能力,多种输出手段,丰富的格式控制,出色的性能。如果在你的开发中需要借助于日志进行调试和审计,你也许需要log4cxx。最后,重要的一点是,如你所见,log4cxx的使用是如此的简单。
2.获取软件包 可以从官方网站(http://logging.apache.org/log4cxx/index.html)获取源代码,下载版本为apache-log4cxx-0.10.0,下载完成后解压缩到合适目录
3.编译 下载的原始文件包中没有包含编译后的开发库,需要自己编译生成,本文使用vc.net2003编译该源文件,编译时需要如下文件包: apr-1.2.11-win32-src.zip和apr-util-1.2.10-win32-src.zip这两个压缩包的下载地址分别如下: http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip http://archive.apache.org/dist/apr/apr-util-1.2.10-win32-src.zip下载完成后将这两个文件分别解压缩到和上面源代码相同的目录下。然后按照如下步骤进行编译:a. 将apr-1.2.11-win32-src.zip解压后的文件名修改为:aprb. 将apr-util-1.2.10-win32-src.zip解压后的文件名修改为:apr-utilc. 通过vc.net2003的DOS工具进入DOS窗口,此处直接在运行命令栏中输入cmd也可,不过为安全起见最后从.net2003的工具栏进入DOS界面d. 使用cd 命令进入apache-log4cxx-0.10.0目录e. 输入configure命令,执行configure.bat批处理文件f. 输入configure-aprutil命令,执行configure-aprutil.bat批处理文件。注意:由于在configure-aprutil.bat文件中使用了linux下的sed命令,所以该步可能会出现类似找不到sed命令的错误,这是由于在windows环境下编译的缘故。可以使用如下两种方法解决:1.下载一个sed for windows的工具;2.使用Cygwin;不过本人强烈推荐使用第二种方法,因为有些sed for windows的工具存在bug。关于如何在windows环境下安装Cygwin请看文章后名说明。g. 使用vc.net2003打开Projects文件夹下的log4cxx.dsw项目,将log4cxx工程设为启动项目,然后编译即可h. 编译成功后,就可以在projects的Debuge或者Release文件夹下看到lib和dll文件
4.项目环境设置 有两种方法可以设置环境:通过.net2003的工具栏或者使用工程属性栏配置,这里只介绍第二种,本文将通过下面的实例程序介绍如何使用第二种方法设置环境
5.实例代码 a.打开.net2003,新建一个空白的win32控制台工程,假设工程名为Test b.添加一个cpp文件,文件名随便命名 c.右键点击Test工程,选择”属性”,然后在C++选项卡中添加附加库目录,注意该目录为../ apache-log4cxx-0.10.0\src\main\include d.在属性的链接器输入选项卡的”附加依赖项”中添加” log4cxx.lib” e.在cpp文件中输入如下测试代码: #include <log4cxx/logger.h> #include <log4cxx/PropertyConfigurator.h> using namespace std; using namespace log4cxx; int main(int argc, char* argv[]) { string trace = "fa"; string Property = "./log.properties"; log4cxx::PropertyConfigurator::configure(Property); LoggerPtr logger = Logger::getLogger(trace); logger->info(("How to use?")); LOG4CXX_INFO(logger, ("你说hello")); for(int i = 0; i < 2; i++) { LOG4CXX_DEBUG(logger, "DEBUG"); LOG4CXX_INFO(logger, "INFO"); LOG4CXX_WARN(logger, "WARN"); LOG4CXX_ERROR(logger, "ERROR"); } return 0; } f.新建一个文本文件,命名为log4cxx.properties,并键入如下内容: # 设置root logger为DEBUG级别,使用了ca和fa两个Appender log4j.rootLogger=DEBUG, ca, fa #对Appender fa进行设置: # 这是一个文件类型的Appender, # 其输出文件(File)为./output.log, # 输出方式(Append)为覆盖方式, # 输出格式(layout)为PatternLayout log4j.appender.fa=org.apache.log4j.FileAppender log4j.appender.fa.File=./output.log log4j.appender.fa.Append=false log4j.appender.fa.layout=org.apache.log4j.PatternLayout log4j.appender.fa.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n #对Appender ca进行设置 # 这是一个控制台类型的Appender # 输出格式(layout)为PatternLayout log4j.appender.ca=org.apache.log4j.ConsoleAppender log4j.appender.ca.layout=org.apache.log4j.PatternLayout log4j.appender.ca.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n g. 将编译好的log4cxx.lib和log4cxx.dll及上面的log4cxx.properties文件拷贝之Test工程目录 h.编译运行该文件,可以看到控制台输出相关日志,并且在工程目录下会得到一个output.log的日志文件
6.补充说明 上面的log4cxx.properties文件为log4xxx的配置文件,该文件主要用来设置该如何生成日志文件及日志文件的格式等信息,关于配置文件的说明可以参考如下文档:http://fanqiang.chinaunix.net/app/other/2006-06-22/4640.shtml
7.Cygwin的安装 关于Cygwin的安装可以参考如下说明http://www.cygwin.cn/site/install/。假设安装目录为D:\cygwin,安装成功后需要设置一下环境变量,可按如下步骤设置环境变量:a. 右键点击我的电脑->属性->高级->环境变量b. 在下面的系统变量中选择Path变量,在最后面添加D:\cygwin\bin即可