我已经尝试了大约 2 周来获得一个可以使用的日志库。我试过 Log4cxx、Log4cpp、log4cplus 和 boost.log。问题不在于这些都不适合我,而是我根本不知道如何让它们工作。我真的很想使用 log4cxx,因为我在工作中使用 log4j/logback,但是我无法获得任何基于 log4j 的库来构建。我已经能够构建和使用 boost 库,但是无论我尝试什么, boost.log 都会给我各种链接器错误。如果有人可以指导我获取分步指南以使这些库之一正常工作,我将不胜感激。另外,如果这很重要,我将使用 eclipse 作为我的 IDE。
4 回答
你有没有得到这个工作?Log4cxx 绝对适用于 Win7。也许您可以发布一些构建错误。只是猜测,也许您没有将 eclipse 项目配置为与 log4cxx 静态库链接。
Boost.Log 非常适合我(Linux 和 Windows)。它不是一个只有头文件的库,有一个你需要链接的编译部分。请参阅此处的说明。
它还依赖于其他非标头 Boost 库:
日志库使用了其他几个也需要构建的 Boost 库。它们是 Boost.Filesystem、Boost.System、Boost.DateTime、Boost.Thread 和 Boost.Regex。有关构建过程的详细说明,请参阅他们的文档。
根据您的平台,可能会有 Boost 库的预构建版本。否则,如果您按照说明自行构建它是很简单的。如果您卡住了,请更新您的问题,说明您卡在哪里以及您所看到的内容。
我推荐Pantheios。首次下载时构建所有内容需要一些时间 - 输入make build test
并去吃午饭 - 你必须在链接时选择输出流(Pantheios 称它们为“后端”),但对于编码来说,它真的很简单,例如
std::string name;
int age;
pantheios::log_DEBUG("name=", name, " age=", pantheios::integer(age));
它是从头开始设计的- 除非打开“DEBUG”级别,否则年龄不会转换为字符串 - 和健壮性- 这就是为什么你不能直接传递基本类型并使用“插入器”(例如)。有关更多信息,请参阅Pantheios 的作者最近发布的这篇博文。pantheios::integer
我设法让 log4cxx 工作,这是在 Windows 7 操作系统上运行的 Visual Studios 2013 中完成的。
以下是我所做的,一步一步:
下载 log4cxx ZIP 包解压其内容, http: //logging.apache.org/log4cxx/download.html
下载 apr 和 apr-util ZIP 包,http://apr.apache.org/download.cgi
然后
- 手动解压这个zip apr-1.2.11-win32-src.zip(解压后的文件夹应该命名为'apr',如果不是手动重命名的话)
- 手动解压这个zip apr-util-1.2.10-win32-src.zip(解压后的文件夹应该命名为'apr-util',如果不是手动重命名的话)
- 打开命令提示符并运行以下命令: cd apache-log4cxx-0.10.0 configure(这将执行 configure.bat)
我们需要禁用 APR ICONV 和 LDAP 支持。为此,我们将手动附加以下文件:
- 打开 apr-util\include\apu.hw。找到以“#define APU_HAVE_APR_ICONV”开头的行。将值更改为 0 并保存。
- 打开 apr-util\include\apr_ldap.hw。找到以“#define APR_HAS_LDAP”开头的行,将值更改为 0 并保存。
我们需要构建 log4cxx.dll,将 *.dsw 转换为 *.cxproj。
- 启动 Visual Studio 2013 并打开 log4cxx.dsw。
- VS 会询问您是否想转换所有内容。只需单击是。迁移报告中可能有一些警告,但不会阻止解决方案打开。
> 项目 xml、apr 和 apr-util 应该会成功构建。
如果您尝试编译 log4cxx 项目,它很可能会因数百个错误而失败。这是由于 VC++ 中的一个可以解决的错误。
- 将所有宏移到它们所在的类之外(上方)。LOG4CXX_LIST_DEF 宏用于定义类。在错误 C2252 中报告的所有宏都需要移出任何类。这也可能包括宏中使用的移动定义。
- 接下来,将所有 LoggingEvent::KeySet 更改为 KeySet(这不再嵌套在父类中)
> 在此之后,log4cxx 项目现在应该可以在您的机器上成功编译。