私のexeとdllのログレベルでシングルトンロガーを書いています。EXEとDLLからSingletonオブジェクトのメンバ変数にアクセス
Logger.h:
#define LOG CLogger::GetInstance().Log
#define LOG_PATH _T(".\\LogFile\\Logger.log")
enum eLogLevel { NONE=0, ERR, WARNING, USER, SYSTEM, DEVELOPER };
class CLogger
{
public:
//Construcor & Destructor
CLogger();
virtual ~CLogger();
//Singleton
static CLogger& GetInstance();
//For logging level preference
//Example: WARNING -> Log only ERR & WARNING messages
//Default = NONE
virtual void SetLogLevel(eLogLevel eLevel);
//Logging
virtual void Log(eLogLevel eLevelType, CString szText);
protected:
//Open & Close the log after used
virtual void CloseLog();
virtual BOOL OpenLog();
CStdioFile m_File;
CString m_szFile;
eLogLevel m_eLevel;
BOOL m_bFileOpened;
};
アイデアはEXEプロジェクトはログレベルを設定する責任Logger.cpp & Logger.hを含める必要があります、です。
一方、DLLプロジェクトでは、Logger.cpp & Logger.hをインクルードする必要がありますが、ログレベルを設定する必要はありません。これは、EXEプロジェクトのログレベルに準拠するためです。
両方のEXE & DLLは、同じログファイルに何かを書き込むことができます。
結果は、DLLプロジェクトがログファイルに書き込むことができるように、SetLogLevel()にDLLプロジェクトを依頼する必要があります。
上記のLogger.hで誰でも問題を見つけることができますか? EXE & DLLは同じプロセス/スレッド上で実行されるため、シングルトンはメンバ変数を含むオブジェクトのインスタンスを共有しませんか?