一、下载源码
1、源码
Log library for C++ - Browse Files at SourceForge.net
2、介绍首页
Log for C++ Project (sourceforge.net)
二、编译工程
1、打开工程
下载好工程后可以看到目录中有msvc10的工程,进入该目录,使用vs2017打开工程文件 msvc10.sln,遇到提示升级工程同意即可。[此时直接编译是会报错的]
2、修改工程
a. 工程文件如下图一所示,在搜索框中搜索“NTEventLogCategories.mc”,找到后选中该文件,右键“属性”,修改命令行“Command Line”内容。
原:
"$(VS100COMNTOOLS)vsvars32.bat" if not exist $(OutDir) md $(OutDir)
mc.exe -h "$(OutDir)" -r "$(OutDir)" "$(ProjectDir)..\%(Filename).mc"
rc.exe -r -fo "$(OutDir)%(Filename).res" "$(OutDir)%(Filename).rc"
link.exe /MACHINE:IX86 -dll -noentry -out:"$(OutDir)NTEventLogAppender.dll" "$(OutDir)%(Filename).res"
后:
"$(VS100COMNTOOLS)vsvars32.bat" if not exist $(OutDir) md $(OutDir)
mc.exe -h "$(OutDir)\" -r "$(OutDir)\" "$(ProjectDir)..\%(Filename).mc"
rc.exe -r -fo "$(OutDir)%(Filename).res" "$(OutDir)%(Filename).rc"
link.exe /MACHINE:IX86 -dll -noentry -out:"$(OutDir)NTEventLogAppender.dll" "$(OutDir)%(Filename).res"
b.sprintf被重定义,所以用宏去关掉 配置项目XXX属性-C/C++预处理器--添加HAVE_SNPRINTF
3、编译
【注意debug,release包的区别,根据自己项目编译使用】
三、工程介绍
如下图,log4cpp为动态库配置,log4cppLIB为静态库,log4cppRunnable为log4cpp的可执行程序版本。 除这三个外,其他的均为测试工程。
根据需要编译自己需要的版本即可。
四、集成到工程
1、配置集成工程
a.头文件拷贝到工程依赖项目录中,工程配置中添加头文件搜索路径;
b.库文件拷贝到工程依赖项目目录中,工程链接器中添加库搜索路径以及链接库名字log4cpp.lib;
c.log4cpp.dll拷贝到debug或者release中;
d.书写集成代码如下,编译运行即可。
2、代码示例
#include <iostream>
#include <log4cpp/Category.hh>
#include <log4cpp/Appender.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/RollingFileAppender.hh>
using namespace std;
int main(int argc, char* argv[])
{
log4cpp::PatternLayout* pLayout1 = new log4cpp::PatternLayout();//创建一个Layout;
pLayout1->setConversionPattern("%d: %p %c %x: %m%n");//指定布局格式;
log4cpp::PatternLayout* pLayout2 = new log4cpp::PatternLayout();
pLayout2->setConversionPattern("%d: %p %c %x: %m%n");
log4cpp::Appender* fileAppender = new log4cpp::FileAppender("fileAppender", "wxb.log");//创建一个Appender;
fileAppender->setLayout(pLayout1);//将指定的Layout添加到Appender;
log4cpp::RollingFileAppender* rollfileAppender = new log4cpp::RollingFileAppender(
"rollfileAppender", "rollwxb.log", 5 * 1024, 1);
rollfileAppender->setLayout(pLayout2);
log4cpp::Category& root = log4cpp::Category::getRoot().getInstance("RootName");//从系统中得到Category的根;
root.addAppender(fileAppender);//将Appender添加到Category;
root.addAppender(rollfileAppender);
root.setPriority(log4cpp::Priority::DEBUG);//设置Category的优先级;
//开始记录日志;
for (int i = 0; i < 100; i++)
{
string strError;
ostringstream oss;
oss << i << ":Root Error Message!";
strError = oss.str();
root.error(strError);
}
log4cpp::Category::shutdown();//关闭Category;