logger_helper.h
1 #pragma once 2 3 #include <filesystem> 4 #include <common/version/version.h> 5 #include <common/SettingsAPI/settings_helpers.h> 6 #include "../logger/logger.h" 7 8 namespace LoggerHelpers 9 { 10 inline std::filesystem::path get_log_folder_path(std::wstring_view appPath) 11 { 12 std::filesystem::path logFolderPath(appPath); 13 logFolderPath.append(LogSettings::logPath); 14 logFolderPath.append(get_product_version()); 15 return logFolderPath; 16 } 17 18 inline bool delete_old_log_folder(const std::filesystem::path& logFolderPath) 19 { 20 try 21 { 22 std::filesystem::remove_all(logFolderPath); 23 return true; 24 } 25 catch (std::filesystem::filesystem_error& e) 26 { 27 Logger::error("Failed to delete old log folder: {}", e.what()); 28 } 29 30 return false; 31 } 32 33 inline bool dir_exists(std::filesystem::path dir) 34 { 35 std::error_code err; 36 auto entry = std::filesystem::directory_entry(dir, err); 37 if (err.value()) 38 { 39 Logger::error("Failed to create directory entry. {}", err.message()); 40 return false; 41 } 42 43 return entry.exists(); 44 } 45 46 inline bool delete_other_versions_log_folders(std::wstring_view appPath, const std::filesystem::path& currentVersionLogFolder) 47 { 48 bool result = true; 49 std::filesystem::path logFolderPath(appPath); 50 logFolderPath.append(LogSettings::logPath); 51 52 if (!dir_exists(logFolderPath)) 53 { 54 Logger::trace("Directory {} does not exist", logFolderPath.string()); 55 return true; 56 } 57 58 std::error_code err; 59 auto folders = std::filesystem::directory_iterator(logFolderPath, err); 60 if (err.value()) 61 { 62 Logger::error("Failed to create directory iterator for {}. {}", logFolderPath.string(), err.message()); 63 return false; 64 } 65 66 for (const auto& dir : folders) 67 { 68 if (dir != currentVersionLogFolder) 69 { 70 try 71 { 72 std::filesystem::remove_all(dir); 73 } 74 catch (std::filesystem::filesystem_error& e) 75 { 76 Logger::error("Failed to delete previous version log folder: {}", e.what()); 77 result = false; 78 } 79 } 80 } 81 82 return result; 83 } 84 85 inline void init_logger(std::wstring moduleName, std::wstring internalPath, std::string loggerName) 86 { 87 std::filesystem::path rootFolder(PTSettingsHelper::get_module_save_folder_location(moduleName)); 88 rootFolder.append(internalPath); 89 90 auto currentFolder = rootFolder; 91 currentFolder.append(LogSettings::logPath); 92 currentFolder.append(get_product_version()); 93 94 auto logsPath = currentFolder; 95 logsPath.append(L"log.log"); 96 Logger::init(loggerName, logsPath.wstring(), PTSettingsHelper::get_log_settings_file_location()); 97 98 delete_other_versions_log_folders(rootFolder.wstring(), currentFolder); 99 } 100 }