Log4cpp编译

579 阅读2分钟

一、下载源码

1、源码

Log library for C++ - Browse Files at SourceForge.net

2、介绍首页

Log for C++ Project (sourceforge.net)

二、编译工程

1、打开工程

下载好工程后可以看到目录中有msvc10的工程,进入该目录,使用vs2017打开工程文件 msvc10.sln,遇到提示升级工程同意即可。[此时直接编译是会报错的]

image.png

2、修改工程

a. 工程文件如下图一所示,在搜索框中搜索“NTEventLogCategories.mc”,找到后选中该文件,右键“属性”,修改命令行“Command Line”内容。

image.png

image.png

原:
"$(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

image.png

3、编译

【注意debug,release包的区别,根据自己项目编译使用】

三、工程介绍

如下图,log4cpp为动态库配置,log4cppLIB为静态库,log4cppRunnable为log4cpp的可执行程序版本。 除这三个外,其他的均为测试工程。

根据需要编译自己需要的版本即可。

image.png

四、集成到工程

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;

尾、参考

(1条消息) VS2017编译配置和使用LOG4CPP_卡木_的博客-CSDN博客