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_projectlog4cpp-1.1.3。

    3.2 编译

     打开msvc10.sln

          使用VS2015打开msvc10.sln:D:develop_projectlog4cpp-1.1.3log4cppmsvc10msvc10.sln。

        编译log4cpp、log4cppLIB

        将sln中的test的工程删除,只保留log4cpp、log4cppLIB,进行编译。 

  4、报错

    错误 C2084 函数“int snprintf(char *const ,const std::size_t,const char *const ,...)”已有主体 log4cpp d:develop_projectlog4cpp-1.1.3log4cppsrcsnprintf.c 536 

    解决方法:定位到这个方法,将这个方法整个注释掉。(这样做目前未发现问题)

    重新编译后,成功。

      生成log4cpp.dll、log4cpp.lib,在目录:D:develop_projectlog4cpp-1.1.3log4cppmsvc10log4cppDebug下。

三 引用 

  1、头文件 *.h

  打开“附加包含目录”,位置如下图:

 

   设置头文件路径(例如,D:develop_projectlog4cpp-1.1.3log4cppinclude),如下图。这样,整个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文件区别的链接

  https://www.cnblogs.com/TenosDoIt/p/3203137.html

  https://www.cnblogs.com/zkwarrior/p/10948174.html

原文地址:https://www.cnblogs.com/lhlc-9-9/p/12358278.html