我正在尝试通过以下方式启用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";
}

当我尝试将“test”写入日志的行时,出现崩溃,提示“Debug Assertion Failed!”。该断言在f:\ dd \ vctools \ crt_bld_self_64_amd64 \ crt \ src \ write.c第67行中。失败的断言是
fh >= 0 && (unsigned)fh < (unsigned)_nhandle

我已经创建了logs目录和bar.log文件以确保它存在。我还确认了我的应用程序和库都是作为64位多线程调试DLL构建的。 log4cpp源文件中没有64位构建,因此我基于32位构建配置创建了一个。我正在使用最新版本的log4cpp。

最佳答案

这是旧文章,但是我想解决这个问题可能对某些人有用。

您很可能只是忘记了在代码中创建目录“logs”

这是关闭流的问题:记录器不会自动为您的日志创建目录,因此,没有目录->没有文件->打开文件失败->无效的文件处理程序->异常。您应该手动创建目录。宏断言,没有更多信息可悲。

10-01 13:57