Как использовать log4cplus в качестве пользовательского одноэлементного класса
Ниже приведен мой код:
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() { }
основная функция:
void logInitial() { LogCp::GetInstance(); } int main(int argc, wchar_t* argv[]) { logInitial(); LOG4CPLUS_WARN(LogCp::GetInstance()._logger, LOG4CPLUS_TEXT("test")); }
Он может правильно войти в функцию конструктора, но он не будет регистрировать "тест" в функции main (), если я снова не добавлю функцию doConfigure () перед LOG4CPLUS_WARN.why?
Что я уже пробовал:
прочитал много подобных вопросов, но все еще не могу решить этот