如何使用log4cplus作为自定义单例类 [英] How to use log4cplus as a custom singleton class

查看:568
本文介绍了如何使用log4cplus作为自定义单例类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是我的代码:

Following is my code:

class LogCp
{
public:

	~LogCp();
	static LogCp& GetInstance();
	static Logger _logger;

private:
	LogCp();
	LogCp(const LogCp&) = delete;
	void operator =(LogCp const&);

};




Logger LogCp::_logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("filelogger"));
//Logger LogCp::_logger = log4cplus::Logger::getRoot();	

LogCp::LogCp()
{
	log4cplus::Initializer initializer;
	try {
		PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("E:\\log4cplus.properties"));
		//_logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("filelogger"));
		LOG4CPLUS_WARN(_logger, LOG4CPLUS_TEXT("logging...."));
	}
	catch (...) {
		LOG4CPLUS_FATAL(_logger, LOG4CPLUS_TEXT("Exception occured..."));
	}
}

LogCp& LogCp::GetInstance()
{
	static LogCp vLogCp;
	return vLogCp;
}

LogCp::~LogCp()
{

}



<主要功能:
主要功能:



the main func:

void logInitial()
{
	LogCp::GetInstance();
   
}

int main(int argc, wchar_t* argv[])
{
	logInitial();
	LOG4CPLUS_WARN(LogCp::GetInstance()._logger, LOG4CPLUS_TEXT("test"));
}



它可以在构造函数中正确记录,但它不会在main()函数中记录test,除非我再次添加doConfigure()函数在LOG4CPLUS_WARN.why之前?



我尝试过:



阅读很多类似的问题,但仍然无法解决这个


It can log correctly in constructor function,but it won't log "test" in main() function unless I add doConfigure() function again before LOG4CPLUS_WARN.why?

What I have tried:

read lots of similar questions but still cannot resolve this

推荐答案

生命周期不涵盖主要范围。了解这些问题是必不可少的。使用指针和物体也很重要。



这可以解决你的问题:



The scope or lifetime of your LogCp doesnt cover the main scope. It is essential to understand that issues. It is also very important if working with pointers and objects.

This should solve your problem:

int main(int argc, wchar_t* argv[])
{
	LogCp::GetInstance();// create in scope of main
	// your code
	LOG4CPLUS_WARN(LogCp::GetInstance()._logger, LOG4CPLUS_TEXT("test"));
}


这篇关于如何使用log4cplus作为自定义单例类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆