0
我在我的自定義類LogCp的構造函數中配置了這個log4cplus的靜態對象,並且在這個構造函數中我寫了一些測試代碼,它可以將信息正確地導出到指定的文件中,但當我調用GetInstance函數時,它將返回唯一的對象,它不能寫入日誌,並且錯誤消息是找不到文件記錄器的appender。它使我困惑,我在構造函數中調用了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將無法登錄main()函數「測試」 ()在LOG4CPLUS_WARN.why之前再次運行?
感謝您的支持者,我只是刪除了「log4cplus :: Initializer初始化程序」,然後一切正常,沒有assert或errormsg,但所有記錄都會在我的進程結束時記錄下來。但是當我編譯我的程序,它警告我,我沒有使用DLL C CRT,因此我需要在使用它之前調用initialize()一次,我應該怎麼做才能在單例類中使用log4cplus?@wilx – TimGallin