Я настраиваю этот статический объект log4cplus в своей конструкторской функции конструктора LogCp, и в этом конструкторе я пишу некоторый тестовый код, и он может экспортировать информацию в назначенный файл правильно, но когда я вызываю GetInstance fun ction, который вернет единственный объект, он не сможет записать журнал, и сообщение об ошибке не может найти приложение filelogger.It запутать меня, я вызвал doConfigure() в конструкторе и регистраторе был настроен правильно, почему я все еще получил эту ошибку в основной функции? Нужно ли мне каждый раз называть doConfigure(), прежде чем писать журнал? Ниже мой код:Как использовать 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"));
}
может правильно войти функцию конструктора, но это не будет регистрировать «тест» в основной() функции, если я не добавить doConfigure() снова перед LOG4CPLUS_WARN.why?
Спасибо за ваш anwser, я отключил «log4cplus :: Initializer initializer», тогда все в порядке, нет утверждений или errormsg, но все записи будут записываться в конце моего процесса. Но когда я скомпилировал моя программа, он предупредил меня, что я не использую DLL C CRT, поэтому мне нужно вызвать initialize() один раз, прежде чем использовать его, что мне делать, чтобы использовать log4cplus в одноэлементном классе? @wilx – TimGallin