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  };