试图写入Log4cpp流时调试断言失败
Debug Assertion Fails When Trying to Write to Log4cpp Stream
我正在尝试使用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"写入日志的行时,我得到一个崩溃,说"调试断言失败!"断言在f:ddvctoolscrt_bld_self_64_amd64crtsrcwrite.c第67行。失败的断言是
fh >= 0 && (unsigned)fh < (unsigned)_nhandle
我已经创建了logs目录和bar.log文件,以确保它存在。我还确认了我的应用程序和库都是作为64位多线程调试dll构建的。在log4cpp源代码中没有64位构建,所以我基于32位构建配置创建了一个。我使用的是最新版本的log4cpp
这是一个旧的帖子,但我想这个问题的解决方案可能对某些人有用。
很可能你只是忘记在代码中创建目录"logs"。
这是关闭流的问题:logger不会为您的日志自动创建目录,因此,no directory -> no file -> open file failed -> invalid file handler ->异常。您应该手动创建目录。
刚刚发现这个问题,并试图得到这个断言。我在MSVC2010中构建了log4cpp (ver 1.1)库和user1229080的Win32和x64平台测试,没有任何断言。
我添加了几行来编译它,并从文件路径中删除了"logs"dir,只是为了摆脱与缺失目录相关的问题:
#include "stdafx.h"
#include <log4cpp/Category.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/BasicLayout.hh>
class Foo
{
private:
log4cpp::Appender* _logAppender, *_conAppender;
log4cpp::Layout* _logAppenderLayout;
public:
Foo();
};
Foo::Foo()
{
_conAppender = new log4cpp::OstreamAppender("con", &std::cout);
_logAppender = new log4cpp::FileAppender("foo", "bar.log");
_logAppenderLayout = new log4cpp::BasicLayout();
_logAppender->setLayout(_logAppenderLayout);
log4cpp::Category::getRoot().setPriority(log4cpp::Priority::DEBUG);
log4cpp::Category::getRoot().addAppender(_logAppender);
log4cpp::Category::getRoot().addAppender(_conAppender);
// Crash on line below. (but not in msvc2010)
log4cpp::Category::getRoot().debugStream() << "test" << log4cpp::eol;
}
int main(int argc, char* argv[]) {
Foo f;
return 0;
}
你在哪个版本的visual c++上遇到了这个断言?
相关文章:
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 使用扫描的调试断言失败
- 图片不显示,关闭时出错 --> 调试断言失败!表达式:is_block_type_valid(标头>_block_use)
- C++ 调试断言失败 - 矢量下标超出视觉工作室的范围
- 调试断言失败的缓冲区!=nullptr
- 获取有关调试断言失败的错误:表达式:"(_Ptr_user &(_BIG_ALLOCATION_ALIGNMENT -1)) == 0" &&0
- 在Win10上使用带有Qt5的OpenCV3.0,调试断言失败
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- C++ 调试断言失败,无效的空指针
- 如何在 Linux 上强制执行矢量下标超出范围的调试断言
- 调试断言仅在某些情况下失败?C++
- 调试断言失败
- 映射/集迭代器不可取消引用 (C++) - 调试断言失败
- std::vector<std::vector<int>>:调试断言失败。C++矢量下标超出范围保留内存
- 使用 Microsoft VS 编写程序C++,但我在这里收到调试断言消息.它可以在 cpp.sh 上运行,repl.i
- 字符串抛出矢量下标调试断言
- 使用调试断言时避免 ODR 冲突
- MFC DDX_RADIO会导致调用dodataexchange(dlgdata.cpp行286)时导致调试断言失败
- 无法在谷歌测试中捕获调试断言(死亡测试不满足它)
- 调试断言失败的矢量下标超出C 范围