我正在尝试使用log4cplus在c ++应用程序中实现日志记录。我能够成功构建/链接(我将log4cplus.lib添加到我的其他库并将log4cplus.dll复制到build / outdir)
当我运行我的应用程序时,我在执行我的Logger :: getInstance调用时遇到以下异常:
LogTesterConsole.exe中0x75cad36f处的未处理异常:Microsoft C ++异常:内存位置为0x0013ed8c的std :: bad_alloc ..
我尝试将调用放在main()例程以及内部,并且具有相同的结果。
有什么想法吗?
代码: -
#include "stdafx.h"
#include <log4cplus/logger.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/configurator.h>
using namespace log4cplus;
int _tmain(int argc, _TCHAR* argv[])
{
BasicConfigurator config;
config.configure();
Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));
LOG4CPLUS_WARN(logger, LOG4CPLUS_TEXT("Hello, World!"));
return 0;
}
答案 0 :(得分:1)
如果您正在调试中构建应用程序,请务必链接到lib4CplusD.lib和lib4CplusD.dll。同样,发布应用程序应链接aginst lib4cplus.lib和lib4cplus.dll我有相同的运行时错误,当我将调试应用程序与调试库链接时,问题得到了解决。
答案 1 :(得分:0)
尝试: -
int _tmain(int argc, _TCHAR* argv[])
{
PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log4cplus.properties"));
Logger root = Logger::getRoot();
try{
Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));
}
catch(...) {
cout << "Exception..." << endl;
LOG4CPLUS_FATAL(root, "Exception occured...");
}
LOG4CPLUS_WARN(logger, LOG4CPLUS_TEXT("Hello, World!"));
return 0;
}
答案 2 :(得分:0)
我知道这个帖子有点旧,但是当我昨天开始尝试log4cplus v2.0.0时遇到了完全相同的问题。
简短回答:这是一个调试/发布版本问题。
现在为任何人提供更长的答案:
./log4cplus-2.0.0/msvc14
中打开了Visual Studio Soultuin,并制作了log4cplus
- Project的版本构建(unicode)(Windows SDK v10.0.16299.0; Platform Toolset v141)。一切都很好。log4cplusU.lib
添加为链接器的附加依赖项log4cplusU.dll
添加到输出目录./log4cplus-2.0.0/include
中的所有内容添加到其他包含现在这就是我遇到@Josh在他的帖子中描述的完全相同的问题。现在实际的问题是,我制作了一个log4cplus的发布版本,但在我自己的应用程序的调试版本中使用了这个版本。
有了这个想法,我发布了自己的应用程序版本,一切都像魅力一样!
我将完整的VS2017解决方案推送到我的GitHub-repo,这样您就可以重新解决问题。只需将此解决方案的配置更改为“Debug”(x86)并观察它在运行时产生异常。将其更改为“Release”(x86)并观察它是否像预期的那样工作!