// Logger.h - DLL 内部简易日志 // 实现:OutputDebugStringW + 可选文件输出(%TEMP%\CommModifyKit.log) // 不依赖 CommModifyService 的 Logger(独立项目原则) #pragma once #include "pch.h" namespace commkit { class Logger { public: enum class Level { Debug = 0, Info, Warning, Error }; // 单例访问 static Logger& Instance(); // 设置日志级别(低于此级别的不输出) void SetLevel(Level level); // 启用/禁用文件输出 void EnableFileOutput(bool enable); // 日志接口 void Log(Level level, const std::string& message); // 便捷方法 void Debug(const std::string& msg) { Log(Level::Debug, msg); } void Info(const std::string& msg) { Log(Level::Info, msg); } void Warning(const std::string& msg) { Log(Level::Warning, msg); } void Error(const std::string& msg) { Log(Level::Error, msg); } private: Logger(); ~Logger(); Logger(const Logger&) = delete; Logger& operator=(const Logger&) = delete; // 将日志写入文件(追加模式) void WriteToFile(const std::wstring& line); // 将字节串转宽字符串(用于 OutputDebugStringW) std::wstring StringToWString(const std::string& str) const; // 格式化日志行:[时间][级别] 消息 std::wstring FormatLine(Level level, const std::string& message); Level level_ = Level::Info; bool file_output_enabled_ = false; std::mutex file_mutex_; }; } // namespace commkit // 全局便捷日志宏(避免每次写 Logger::Instance().XXX) #define LOG_DEBUG(msg) commkit::Logger::Instance().Debug(msg) #define LOG_INFO(msg) commkit::Logger::Instance().Info(msg) #define LOG_WARNING(msg) commkit::Logger::Instance().Warning(msg) #define LOG_ERROR(msg) commkit::Logger::Instance().Error(msg)