如何优雅的在Visual Studio中配置log4cplus

来源:互联网 发布:patagonia c4 淘宝哪家 编辑:程序博客网 时间:2024/05/22 09:02

背景

最近在准备一个开源机器人足球项目,底层平台准备用C++实现。正发愁不知道如何进行日志记录,同学给我推荐了log4cplus。但实际使用时发现按照网上的教程根本配置不了,于是还是自己折腾得了。╮(╯_╰)╭

原因

网上的资料大都比较古老,而且你抄我,我抄你,导致教程中有错误都不自知。下面的内容比较细,老手们直接看这儿就好:

在项目中添加log4cplus包含目录,并添加库文件到项目中并根据生成版本设置生成排除。

解决方案

本次折腾用到的环境

  • Windows 10 15063.413 64位专业版
  • log4cplus最新稳定版版
    我使用的是1.2.1-rc11
  • Visual Studio 2017 Community
    其他的vs版本没有测试,2010以上的应该都可以。

准备好就可以开始了~


编译log4cplus

  1. 先将log4cplus解压出来,比如D盘

  2. 进入 D:\log4cplus-1.2.1-rc1\msvc10 目录下,可以看到有很多文件,打开 log4cplus.sln

    打开目录

  3. 出现了安全提示,是关于测试样例的,所以不导入也没啥问题。不过因为我信(you)任(lan)他(ai),就全部允许。

    安全提示

  4. 提示要升级项目文件,这里直接确定允许就好。

    升级项目

  5. 升级完成,下面的状态栏提示全部成功,但坑爹的事儿就来了。

    升级成功

  6. 先编译试一下,选择Release_Unicode,接着 生成->生成解决方案。

    选择Release_Unicode

    测试生成

    完美提示出错,编译器告诉我们SDK版本不对。

    SDK版本出错

    随便选择个项目,右键属性。啥,怎么没有升级SDK?

    打开属性

    SDK版本不对

    接下来就是痛苦的工作,在属性页上选择配置->所有配置,然后将Windows SDK 版本设为10.0.15063.0

    设置新的SDK版本

    注意,可能每个人的电脑情况都不一样,不是每个人都会出现SDK版本不对的错误,所以需要随机应变~

    挨个改吧,每一个都不能落下。╮(╯_╰)╭

  7. 全部改完之后,在编译试下呗

    好像没啥问题了,很正常嘛~

    再次测试

    等啊等啊,啊嘞,又失败了!

    再次失败

    提示找不到QtGlobal这个Include文件,原因大概是因为没有安装Qt导致的,有需要的同学可以下一个Qt装上然后包含Include,像我这种没追求的就直接删除了事~

    未包含Include文件

    在出问题的两个项目Qt4DebugAppenderQt5DebugAppender上右键选择移除

    移除出错项目

  8. 再次生成解决方案,OK,全部完成~

    终于成功

  9. 还有一步,将配置文件改为Debug_Unicode ,再生成一次。

    生成Debug_Unicode版

    因为上一次生成的库文件是用在我们自己项目的Release版的,这次我们需要生成用在Debug版的log4cplus库。

  10. 这次全部弄完,可以关掉vs了。

    全部成功

在项目中引用log4cplus

  1. 先建立一个测试项目。

    新建项目

    设置默认就好。

    默认设置

  2. 接下来需要引用库了,我是用静态链接的方式。
    有两个选择

    • 把Include文件和库文件复制到当前项目中再引用
    • 直接引用原始项目中的。

    像我这种追(lan)求(ai)效(fa)率(zuo)的人肯定是选第二种啦~

  3. testLog项目上右键->属性

    打开项目属性窗口

  4. 在弹出的属性窗口中,选择 C/C++->常规->附加包含目录,选择log4cplus的Include文件夹。

    打开附加包含目录选项

    添加Include文件夹

  5. 确定确定保存后,还是在testLog上右键->添加->现有项,分别将 D:\log4cplus-1.2.1-rc1\msvc10\Win32\bin.Release_Unicode下的 log4cplusSU.libD:\log4cplus-1.2.1-rc1\msvc10\Win32\bin.Debug_Unicode 下的 log4cplusSUD.lib添加到项目中。

    如图所示

    添加现有项

    添加库文件

    其实还生成了log4cplusU.liblog4cplusUD.lib两个文件,但我在测试的时候发现不添加也可以编译成功,就没有加入项目。如果还有其他问题的也可以添加试试~

  6. 还剩最后一步。在添加的 log4cplusSUD.lib上右键->属性,在弹出的属性窗口的左上角选择配置为Release,然后将从生成中排除设置为,然后确定保存。

    同样的,在log4cplusSU.lib的属性窗口中设置配置文件为Debug,设置从生成中排除
    打开库文件属性

    设置生成时排除

    这样做的目的是为了让编译器在生成不同的版本时不会找错库文件。

  7. 好了,测试一下。将资料中的代码略加修改(原本的有错)。

#include "stdafx.h"#include <log4cplus\consoleappender.h>#include <log4cplus\loggingmacros.h>using namespace log4cplus;using namespace std;int main(){    // 定义一个控制台的Appender       SharedAppenderPtr pConsoleAppender(new ConsoleAppender());    // 定义一个简单的Layout,并绑定到Appender       auto_ptr<Layout> pSimpleLayout(new SimpleLayout());    pConsoleAppender->setLayout(pSimpleLayout);    // 定义Logger,并设置优先级       Logger pTestLogger  = Logger::getInstance(_T("LoggerName"));    pTestLogger.setLogLevel(WARN_LOG_LEVEL);    // 将需要关联Logger的Appender添加到Logger上       pTestLogger.addAppender(pConsoleAppender);    // 输出日志信息       LOG4CPLUS_WARN(pTestLogger, "We Can Do It!");    return 0;}

生成试一下,成功!

成功

换成Release版也没有问题~

大成功


后记

还是要多折腾啊,不然按着网上的配置教程来,这么强大的库就用不上了。
虽然我也不怎么写C++ ╮(╯_╰)╭


  1. log4cplus下载地址 ↩
原创粉丝点击