我正在为我的 exe 和 dll 编写具有日志记录级别的单例记录器。
记录器.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 将在同一个进程/线程上运行?