我正在尝试通过以下方式使用 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。
最佳答案
这是旧帖子,但我想这个问题的解决方案可能对某些人有用。
很可能您只是忘记在代码中创建目录“logs”。
这是关闭流的问题:记录器不会为您的日志自动创建目录,因此,没有目录 -> 没有文件 -> 打开文件失败 -> 无效文件处理程序 -> 异常。您应该手动创建目录。宏断言,没有更多信息令人难过。
关于c++ - 尝试写入 Log4cpp 流时调试断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15972525/