Logger.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Logger.h - DLL 内部简易日志
  2. // 实现:OutputDebugStringW + 可选文件输出(%TEMP%\CommModifyKit.log)
  3. // 不依赖 CommModifyService 的 Logger(独立项目原则)
  4. #pragma once
  5. #include "pch.h"
  6. namespace commkit {
  7. class Logger {
  8. public:
  9. enum class Level {
  10. Debug = 0,
  11. Info,
  12. Warning,
  13. Error
  14. };
  15. // 单例访问
  16. static Logger& Instance();
  17. // 设置日志级别(低于此级别的不输出)
  18. void SetLevel(Level level);
  19. // 启用/禁用文件输出
  20. void EnableFileOutput(bool enable);
  21. // 日志接口
  22. void Log(Level level, const std::string& message);
  23. // 便捷方法
  24. void Debug(const std::string& msg) { Log(Level::Debug, msg); }
  25. void Info(const std::string& msg) { Log(Level::Info, msg); }
  26. void Warning(const std::string& msg) { Log(Level::Warning, msg); }
  27. void Error(const std::string& msg) { Log(Level::Error, msg); }
  28. private:
  29. Logger();
  30. ~Logger();
  31. Logger(const Logger&) = delete;
  32. Logger& operator=(const Logger&) = delete;
  33. // 将日志写入文件(追加模式)
  34. void WriteToFile(const std::wstring& line);
  35. // 将字节串转宽字符串(用于 OutputDebugStringW)
  36. std::wstring StringToWString(const std::string& str) const;
  37. // 格式化日志行:[时间][级别] 消息
  38. std::wstring FormatLine(Level level, const std::string& message);
  39. Level level_ = Level::Info;
  40. bool file_output_enabled_ = false;
  41. std::mutex file_mutex_;
  42. };
  43. } // namespace commkit
  44. // 全局便捷日志宏(避免每次写 Logger::Instance().XXX)
  45. #define LOG_DEBUG(msg) commkit::Logger::Instance().Debug(msg)
  46. #define LOG_INFO(msg) commkit::Logger::Instance().Info(msg)
  47. #define LOG_WARNING(msg) commkit::Logger::Instance().Warning(msg)
  48. #define LOG_ERROR(msg) commkit::Logger::Instance().Error(msg)