Log4cpp 编译+引用
一 Log4cpp介绍
Log4cpp 类似的支持库还包括Java(log4j),C++(log4cpp、log4cplus),C(log4c),python(log4p)等。
log4c... 是基于log4j的一系列的c++移植版本,使用了log4j的模式结构,目前主要有以下几个版本:
1. log4cxx ,Apache下的孵化项目,不能独立编译,依赖于APR,编译比较麻烦,2008年以后就没再更新;
2. log4cplus ,最近一次更新2016-01-16,不依赖于第三方库;
3. log4cpp ,也不依赖与第三方库,与log4cplus功能类似,但是简化了一些实现,增加了一些功能;
二 Log4cpp编译
1、下载
文件名: log4cpp-1.1.1.tar.gz
下载地址: http://sourceforge.net/projects/log4cpp/files/log4cpp-1.1.x%20%28new%29/log4cpp-1.1/
2、编译环境
目标平台:Windows 8.1、VS2015(v140)
3、编译过程
3.1 解压
将log4cpp-1.1.1.tar.gz解压缩到:D:\develop_project\log4cpp-1.1.3。
3.2 编译
打开msvc10.sln
使用VS2015打开msvc10.sln:D:\develop_project\log4cpp-1.1.3\log4cpp\msvc10\msvc10.sln。
编译log4cpp、log4cppLIB
将sln中的test的工程删除,只保留log4cpp、log4cppLIB,进行编译。
4、报错
错误 C2084 函数“int snprintf(char *const ,const std::size_t,const char *const ,...)”已有主体 log4cpp d:\develop_project\log4cpp-1.1.3\log4cpp\src\snprintf.c 536
解决方法:定位到这个方法,将这个方法整个注释掉。(这样做目前未发现问题)
重新编译后,成功。
生成log4cpp.dll、log4cpp.lib,在目录:D:\develop_project\log4cpp-1.1.3\log4cpp\msvc10\log4cpp\Debug下。
三 引用
1、头文件 *.h
打开“附加包含目录”,位置如下图:
设置头文件路径(例如,D:\develop_project\log4cpp-1.1.3\log4cpp\include),如下图。这样,整个include文件夹中的头文件就引入到工程里了。
2、静态库*.lib
找到刚才生成的lib文件的路径,添加到下图所示“附加库目录”的位置。最后将lib文件名写在下图“附加依赖项”的位置。
3、动态库 *.dll
将动态库文件复制粘贴到工程文件所在的目录下 和 \debug目录下。如图:
四 使用说明
log4cpp.properties
通过配置文件配置log4cpp,log4cpp.properties的内容如下:
# log4cpp.properties log4cpp.rootCategory=DEBUG, rootAppender log4cpp.category.sub1=DEBUG, A1, A2 log4cpp.category.sub1.sub2=DEBUG, A3 log4cpp.appender.rootAppender=ConsoleAppender log4cpp.appender.rootAppender.layout=PatternLayout log4cpp.appender.rootAppender.layout.ConversionPattern=%d [%p] %m%n log4cpp.appender.A1=FileAppender log4cpp.appender.A1.fileName=A1.log log4cpp.appender.A1.layout=BasicLayout log4cpp.appender.A2=FileAppender log4cpp.appender.A2.threshold=WARN log4cpp.appender.A2.fileName=A2.log log4cpp.appender.A2.layout=PatternLayout log4cpp.appender.A2.layout.ConversionPattern=%d [%p] %m%n # 输出到回卷文件,即当文件到达某个大小后回卷 log4cpp.appender.A3=RollingFileAppender log4cpp.appender.A3.fileName=A3.log log4cpp.appender.A3.maxFileSize=200 log4cpp.appender.A3.maxBackupIndex=1 log4cpp.appender.A3.layout=PatternLayout log4cpp.appender.A3.layout.ConversionPattern=%d [%p] %m%n # log4cpp::OstreamAppender // 输出到一个ostream类 # log4cpp::StringQueueAppender // 输出到内存队列
将log4cpp.properties文件引入到工程中。
编辑 main.cpp 代码如下:
#include "stdafx.h" #include <log4cpp/Category.hh> #include <log4cpp/PropertyConfigurator.hh> int main(int argc, char** argv) { std::string initFileName = "log4cpp.properties"; log4cpp::PropertyConfigurator::configure(initFileName); // 使用前要加载配置文件 log4cpp::Category& root = log4cpp::Category::getRoot(); log4cpp::Category& sub1 = log4cpp::Category::getInstance(std::string("sub1")); log4cpp::Category& sub2 = log4cpp::Category::getInstance(std::string("sub1.sub2")); root.warn("Storm is coming"); sub1.debug("Received storm warning"); sub1.info("Closing all hatches"); sub2.debug("Hiding solar panels"); sub2.error("Solar panels are blocked"); sub2.debug("Applying protective shield"); sub2.warn("Unfolding protective shield"); sub2.info("Solar panels are shielded"); sub1.info("All hatches closed"); root.info("Ready for storm."); log4cpp::Category::shutdown(); system("pause"); return 0; }
运行就可以看到日志文件。
Log4cpp具体如何使用,可以参考以下链接
http://log4cpp.sourceforge.net/#simpleexample
https://www.ibm.com/developerworks/cn/linux/l-log4cpp/
https://www.xuebuyuan.com/3255730.html
介绍lib与dll文件区别的链接