2016-11-29 9 views
0

이 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보다 먼저 다시 발생합니까?

답변

0

라이브러리를 사용하기 전에 구성해야합니다. doConfigure() 함수는 아무런 출력도 없도록 appenders를 설정합니다.

log4cplus::Initializer initializer;을 사용하는 것은 잘못되었습니다. 라이브러리를 초기화하고 생성자의 끝에서 라이브러리를 초기화 해제합니다. initializer 개체는 라이브러리를 사용하는 동안 지속되어야합니다.

+0

감사합니다. jsut은 "log4cplus :: Initializer initializer"를 제거한 다음 모든 사항이 정상이며 assert 또는 errormsg가 없지만 모든 레코드가 프로세스 끝에 기록됩니다. 그러나 컴파일 할 때 내 프로그램, 그것은 내가 그것을 사용하기 전에 initialize()를 호출해야하므로 DLL C CRT를 사용하지 않는다고 경고했다. 싱글 톤 클래스에서 log4cplus를 사용하려면 어떻게해야 하는가? @wilx – TimGallin