このlog4cplusの静的オブジェクトをカスタムクラスのLogCpのコンストラクタ関数で設定します。このコンストラクタでは、テストコードをいくつか記述して情報を指定したファイルに正しくエクスポートできます唯一のオブジェクトを返すGetInstance funtionを呼び出すと、ログを書き込むことができず、エラーメッセージが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を追加しない限り、それはmain()関数で「テスト」をログに記録しません()関数はLOG4CPLUS_WARN.whyの前に再び機能しますか?
あなたのanwserのおかげで、私は "log4cplus :: Initializer initializer"を削除してから、すべてがOKです。アサーションやerrormsgはありませんが、すべてのレコードはプロセスの最後に記録されます。私のプログラムでは、DLL C CRTを使用していないと警告していますので、使用する前にinitialize()を一度呼び出す必要があります。シングルトンクラスでlog4cplusを使用するにはどうすればよいですか?@wilx – TimGallin