이 log4cplus의 정적 객체를 내 사용자 정의 클래스 LogCp의 생성자 함수에서 구성하고이 생성자에서 일부 테스트 코드를 작성하고 정보를 지정된 파일로 올바르게 내보낼 수 있지만 유일한 객체를 반환하는 GetInstance funtion을 호출하면 로그를 쓸 수 없으며 오류 메시지가 filelogger.It의 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를 추가하지 않는 것이) (주 기능에서 "테스트"를 기록하지 않습니다() 함수가 LOG4CPLUS_WARN.why보다 먼저 다시 발생합니까?
감사합니다. jsut은 "log4cplus :: Initializer initializer"를 제거한 다음 모든 사항이 정상이며 assert 또는 errormsg가 없지만 모든 레코드가 프로세스 끝에 기록됩니다. 그러나 컴파일 할 때 내 프로그램, 그것은 내가 그것을 사용하기 전에 initialize()를 호출해야하므로 DLL C CRT를 사용하지 않는다고 경고했다. 싱글 톤 클래스에서 log4cplus를 사용하려면 어떻게해야 하는가? @wilx – TimGallin