1.环境
(1)Windows7 64bit
(2)VS2017
(3)log4cpp-1.1.3.tar.gz
2.编译
参考:http://www.jiazi.cn/blog/?id=55
解压log4cpp-1.1.3.tar.gz 得到log4cpp文件夹
该版本指供了msvc6,msvc7(2003),msvc10(2010)的编译解决方案,其它编译解决方案可以从中选择一个进行调整。
选择msvc10,复制并粘贴到 log4cpp文件夹,重命名为msvc2017
cd msvc2017
open the msvc2010.sln解决方案
点OK,按要求升级
point1:
在右侧项目中serach: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"
后:
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"
point2:sprintf被重定义,所以用宏去关掉
参考:https://www.cnblogs.com/happyamyhope/p/6872485.html
配置项目XXX属性-C/C++预处理器--添加HAVE_SNPRINTF
point3:
查看log4cpp的运行库选项:配置项目XXX属性---C/C++--代码生成---运行库。。。。
在使用log4cpp的工程中药保持一致!!!!!
point4:!!!!
参考https://blog.csdn.net/huguohu2006/article/details/8486817
根据运行库配置忽略相关的库:配置项目XXX属性--LINK--输入---忽略特定的库---
下表显示根据要使用的运行时库应忽略的库。
若要使用第一行运行时库 请忽略第2行的这些库
单线程 (libc.lib)
libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
多线程 (libcmt.lib)
libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
使用 DLL 的多线程 (msvcrt.lib)
libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
调试单线程 (libcd.lib)
libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib
调试多线程 (libcmtd.lib)
libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib
使用 DLL 的调试多线程 (msvcrtd.lib)
libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib
然后编译就OK了。
注意:右侧项目中有多个解决方案,如log4cpp是共享库、log4cppLIB是静态库,还有一些测试用例,可以不用管。每个都可以邮件单独
生成解决方案
3.配置
4.测试
参考:https://www.cnblogs.com/happyamyhope/p/6872485.html
配置环境变量:主要是为类LINK 库和头文件
#include "pch.h"
#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;
return 0;
}
在工程文件中就可以找到日志文件wxb.log:
2019-07-24 15:12:07,837: ERROR RootName : 0:Root Error Message!
2019-07-24 15:12:07,838: ERROR RootName : 1:Root Error Message!
2019-07-24 15:12:07,838: ERROR RootName : 2:Root Error Message!
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2019-07-24 15:12:07,838: ERROR RootName : 99:Root Error Message!
2019-07-24 15:12:07,838: ERROR RootName : 100:Root Error Message!