Logger.h
1 #pragma once 2 3 #include <fstream> 4 #include <filesystem> 5 6 #include <shlobj.h> 7 8 std::filesystem::path get_desktop_path() 9 { 10 wchar_t* p; 11 if (S_OK != SHGetKnownFolderPath(FOLDERID_Desktop, 0, NULL, &p)) return ""; 12 13 std::filesystem::path result = p; 14 CoTaskMemFree(p); 15 16 return result; 17 } 18 19 class Logger 20 { 21 private: 22 inline static std::wofstream logger; 23 24 public: 25 ~Logger() 26 { 27 logger.close(); 28 } 29 30 static void init(std::string loggerName) 31 { 32 std::filesystem::path rootFolder(get_desktop_path()); 33 34 auto logsPath = rootFolder; 35 logsPath.append(L"monitor_ids.txt"); 36 37 logger.open(logsPath.string(), std::ios_base::out | std::ios_base::app); 38 } 39 40 template<typename FormatString, typename... Args> 41 static void log(FormatString fmt, Args&&... args) 42 { 43 logger << std::vformat(fmt, std::make_wformat_args(args...)) << std::endl; 44 } 45 };