我正在为我的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都能够将任何内容写入同一个日志文件。
现在的结果是,我将需要向SetLogLevel()请求DLL项目,以便DLL项目能够写入日志文件。
任何人都可以在上面的Logger.h上发现问题吗? Singleton不会共享包含成员变量的一个对象实例,因为EXE & DLL将在同一个进程/线程上运行?