diff --git a/scripts/ci/linux/sbinit.config b/scripts/ci/linux/sbinit.config index e7715fc..413d783 100644 --- a/scripts/ci/linux/sbinit.config +++ b/scripts/ci/linux/sbinit.config @@ -4,5 +4,6 @@ "../mods/" ], - "storageDirectory" : "../storage/" + "storageDirectory" : "../storage/", + "logDirectory" : "../logs/" } \ No newline at end of file diff --git a/scripts/ci/macos/sbinit.config b/scripts/ci/macos/sbinit.config index e7715fc..413d783 100644 --- a/scripts/ci/macos/sbinit.config +++ b/scripts/ci/macos/sbinit.config @@ -4,5 +4,6 @@ "../mods/" ], - "storageDirectory" : "../storage/" + "storageDirectory" : "../storage/", + "logDirectory" : "../logs/" } \ No newline at end of file diff --git a/scripts/ci/windows/assemble.bat b/scripts/ci/windows/assemble.bat index a6a8112..c5c7a3f 100644 --- a/scripts/ci/windows/assemble.bat +++ b/scripts/ci/windows/assemble.bat @@ -5,6 +5,7 @@ if exist %client% rmdir %client% /S /Q mkdir %client% mkdir %client%\storage mkdir %client%\mods +mkdir %client%\logs mkdir %client%\assets mkdir %client%\win diff --git a/scripts/ci/windows/sbinit.config b/scripts/ci/windows/sbinit.config index aeecdad..a37768e 100644 --- a/scripts/ci/windows/sbinit.config +++ b/scripts/ci/windows/sbinit.config @@ -4,5 +4,6 @@ "..\\mods\\" ], - "storageDirectory" : "..\\storage\\" + "storageDirectory" : "..\\storage\\", + "logDirectory" : "..\\logs\\" } \ No newline at end of file diff --git a/source/game/StarRoot.cpp b/source/game/StarRoot.cpp index 4d67563..a1c43ae 100644 --- a/source/game/StarRoot.cpp +++ b/source/game/StarRoot.cpp @@ -81,12 +81,12 @@ Root::Root(Settings settings) : RootBase() { File::makeDirectory(m_settings.storageDirectory); if (m_settings.logFile) { - String logFile = toStoragePath(*m_settings.logFile); - String logDirectory = File::relativeTo(m_settings.storageDirectory, "logs"); - if (!File::isDirectory(logDirectory)) - File::makeDirectory(logDirectory); + String logFile = File::relativeTo(m_settings.logDirectory.value(m_settings.storageDirectory), *m_settings.logFile); + String oldLogDirectory = m_settings.logDirectory.value(File::relativeTo(m_settings.storageDirectory, "logs")); + if (!File::isDirectory(oldLogDirectory)) + File::makeDirectory(oldLogDirectory); - File::backupFileInSequence(logFile, File::relativeTo(logDirectory, *m_settings.logFile), m_settings.logFileBackups); + File::backupFileInSequence(logFile, File::relativeTo(oldLogDirectory, *m_settings.logFile), m_settings.logFileBackups); Logger::addSink(make_shared(logFile, m_settings.logLevel, true)); } Logger::stdoutSink()->setLevel(m_settings.logLevel); diff --git a/source/game/StarRoot.hpp b/source/game/StarRoot.hpp index 8015362..8c71a02 100644 --- a/source/game/StarRoot.hpp +++ b/source/game/StarRoot.hpp @@ -71,8 +71,11 @@ public: // Top-level storage directory under which all game data is saved String storageDirectory; + // Directory to store logs - if not set, uses storage directory and keeps old logs in seperate folder + Maybe logDirectory; + // Name of the log file that should be written, if any, relative to the - // storage directory + // log directory Maybe logFile; // Number of rotated log file backups diff --git a/source/game/StarRootLoader.cpp b/source/game/StarRootLoader.cpp index f1e005f..81328da 100644 --- a/source/game/StarRootLoader.cpp +++ b/source/game/StarRootLoader.cpp @@ -173,7 +173,7 @@ Root::Settings RootLoader::rootSettingsForOptions(Options const& options) const ); rootSettings.storageDirectory = bootConfig.getString("storageDirectory"); - + rootSettings.logDirectory = bootConfig.optString("logDirectory"); rootSettings.logFile = options.parameters.value("logfile").maybeFirst().orMaybe(m_defaults.logFile); rootSettings.logFileBackups = bootConfig.getUInt("logFileBackups", 10);