- 目的
使用开源代码为应用程序添加日志功能
- 相关版本
项目
版本
备注
OS
Win7 64位
老掉牙
编译器
VS2012 Express
Win7上的最新版本,免费
log4cplus
V1.1.3-rc4
不要一味的求新
- 下载log4cplus
http://sourceforge.net/projects/log4cplus/
http://jaist.dl.sourceforge.net/project/log4cplus/log4cplus-stable/1.1.3/log4cplus-1.1.3-rc4.zip
- 解压文件
解压目录可以任意选择,一般不要在目录中包含空格、中文字符等。比如我使用的位置是:
E:\C++Workspace\log4cplus-1.2.0-rc3
- 打开工程文件(解决方案文件)
进入msvc10目录,用vs2012 Express打开log4cplus.sln
VS会提示工程文件升级,升级就是了。完成之后如下图所示。
- 编译log4cplusS
设置解决方案的编译配置选项,解决方案配置一定要选Debug_Unicode
可以编译整个解决方案,不过我只编译了log4cplusS这个工程。
等待1分钟左右,可以在log4cplus-1.2.0-rc3\msvc10\Win32\bin.Debug_Unicode目录下找到log4cplusSUD.lib文件,文件还挺大的。
库的编译工作到此结束。
- 测试源代码
用VS2012新建一个Win32 Console Application,工程名称、位置随意,代码如下。
#include <log4cplus/logger.h> #include <log4cplus/fileappender.h> #include <log4cplus/consoleappender.h> #include <log4cplus/layout.h> <span style="background-color: rgb(255, 0, 0);">#include <log4cplus\loggingmacros.h></span> using namespace log4cplus; using namespace log4cplus::helpers; // Link Lib int _tmain(int argc, _TCHAR* argv[]) { // 定义一个控制台的Appender SharedAppenderPtr pConsoleAppender(new ConsoleAppender()); // 定义一个简单的Layout,并绑定到Appender std::auto_ptr<Layout> pSimpleLayout(new SimpleLayout()); pConsoleAppender->setLayout(pSimpleLayout); // 定义Logger,并设置优先级 Logger pTestLogger = Logger::getInstance(_T("LoggerName")); pTestLogger.setLogLevel(WARN_LOG_LEVEL); // 将需要关联Logger的Appender添加到Logger上 pTestLogger.addAppender(pConsoleAppender); // 输出日志信息 LOG4CPLUS_WARN(pTestLogger, "This is a <Warn> log message..."); return 0; }
- 设置工程的头文件及库
将log4cplus源码中的头文件目录加入到工程中。
设置库文件引用位置,即log4cplusSUD.lib所在的位置。
将库文件添加至工程中。
- 运行测试代码
到目前一切就绪,按下Ctrl+F5,看到日志信息。
- 后续深入学习可以参考网上其他的资料
- 问题
一个简单的工具编译竟然花了5个多小时的时间。回忆了下有以下几个问题,
- 编译版本
网上的教程大多是关于log4cplus-1.0.x的,到了1.1.x之后,工程结构发生了一些变化,但是没有相关的文档提示。比如之前是编译静态库的工程,工程名很明显,这个版本里就没有什么明显的提示。在试了N多次log4cplus编译失败之后,试了下log4cplusS,总算把之前出现的问题给解决了。
- 编译的配置
一般使用VS都是release和debug两个版本,用这两个配置编译出来东西都是在链接的时候出错。百思不得其解啊。最后在某一篇博文的不起眼的地方看到Debug_Unicode的配置,终于在快要放弃前看到了预期的结果。而且Release_Unicode版本也无法链接成功。老外的思维有点理解不了。
12. 感想
虽然现在有了Express版的VS,一直不太喜欢微软的IDE和SDK,每个新版本相对前一个版本都有很大的变化。很多在前一个版本VS上编译通过的代码,到了新版本就挂了。当然这不一定是微软的问题。所以有个想法,就是开源的软件还是比较适合运行在Linux上。
做个图文教程,上传图片超累啊。。。