c++ - 尝试写入 Log4cpp 流时调试断言失败

标签 c++ visual-c++ crash log4cpp

我正在尝试通过以下方式使用 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/

相关文章:

c# - native C/C++ 和 C# (.NET) 之间最轻量级的 IPC 解决方案是什么?

android - 有时我的应用程序在更新 recyclerView 行中上传视频的进度时崩溃 -Android

c++ - 注册回调函数后出现段错误

java - 从 const 方法调用 JNI 函数

c++ - 当项目在 Release模式下崩溃时如何获取函数名称和行号

c++ - DirectX 11 D3DXMatrixTranslation 继续运行?

c++ - 重载成员函数的 decltype

visual-studio-2010 - Visual Studio, MSBuild : First build after a clean fails, 以下构建成功

ios - 两台 iPhone 4 版本 4.3.3 上已接受的 App store 游戏崩溃

c# - 打开文件时,Visual Studio 2013崩溃