【发布时间】:2013-04-12 13:22:10
【问题描述】:
我正在尝试通过以下方式使用 log4cpp 启用日志记录。
class Foo
{
private:
log4cpp::Appender* _logAppender;
log4cpp::Layout* _logAppenderLayout;
}
Foo::Foo()
{
_logAppender = new log4cpp::FileAppender("foo", "logs/bar.log"));
_logAppenderLayout = new log4cpp::BasicLayout();
_logAppender.setLayout(_logAppenderLayout);
log4cpp::Category::getRoot().setPriority(log4cpp::Priority::DEBUG);
log4cpp::Category::getRoot().addAppender(_logAppender);
// Crash on line below.
log4cpp::Category::getRoot().debugStream() << "test";
}
当我到达尝试将“测试”写入日志的行时,我遇到了一个崩溃,显示“调试断言失败!”断言在 f:\dd\vctools\crt_bld_self_64_amd64\crt\src\write.c 第 67 行。失败的断言是
fh >= 0 && (unsigned)fh < (unsigned)_nhandle
我已经创建了日志目录和 bar.log 文件以确保它存在。我还确认我的应用程序和库都是作为 64 位多线程调试 DLL 构建的。 log4cpp 源中没有 64 位构建,所以我基于 32 位构建配置创建了一个。我正在使用最新版本的 log4cpp。
【问题讨论】:
-
也许 log4cpp 需要的不仅仅是 64 位版本的配置更改。例如,指针和 HANDLE 大小有很多问题需要担心。
-
我想可能是这样。我现在正在研究其他日志记录框架,但希望在 64 位应用程序中使用过 log4cpp 的人能看到这一点。
-
对于遇到此问题的任何人,我都无法使其正常工作。我的解决方案是转到 google-glog code.google.com/p/google-glog。它没有内置的 64 位配置,但很容易创建。
标签: c++ visual-c++ crash log4cpp