diff options
-rw-r--r-- | src/Logger.h | 14 | ||||
-rw-r--r-- | src/Root.cpp | 17 | ||||
-rw-r--r-- | src/main.cpp | 5 |
3 files changed, 29 insertions, 7 deletions
diff --git a/src/Logger.h b/src/Logger.h index 649c11ded..b4bf97cd6 100644 --- a/src/Logger.h +++ b/src/Logger.h @@ -27,14 +27,26 @@ public: { public: + cAttachment() : m_listener(nullptr) {} cAttachment(cAttachment && a_other) : m_listener(a_other.m_listener) { + a_other.m_listener = nullptr; } ~cAttachment() { - cLogger::GetInstance().DetachListener(m_listener); + if (m_listener != nullptr) + { + cLogger::GetInstance().DetachListener(m_listener); + } + } + + cAttachment & operator=(cAttachment && a_other) + { + m_listener = a_other.m_listener; + a_other.m_listener = nullptr; + return *this; } private: diff --git a/src/Root.cpp b/src/Root.cpp index c10bd09bd..a487310a8 100644 --- a/src/Root.cpp +++ b/src/Root.cpp @@ -116,14 +116,19 @@ void cRoot::Start(std::unique_ptr<cSettingsRepositoryInterface> a_OverridesRepo) auto consoleLogListener = MakeConsoleListener(m_RunAsService); auto consoleAttachment = cLogger::GetInstance().AttachListener(std::move(consoleLogListener)); - auto fileLogListenerRet = MakeFileListener(); - if (!fileLogListenerRet.first) + + cLogger::cAttachment fileAttachment; + if (!a_OverridesRepo->HasValue("Server","DisableLogFile")) { - m_TerminateEventRaised = true; - LOGERROR("Failed to open log file, aborting"); - return; + auto fileLogListenerRet = MakeFileListener(); + if (!fileLogListenerRet.first) + { + m_TerminateEventRaised = true; + LOGERROR("Failed to open log file, aborting"); + return; + } + fileAttachment = cLogger::GetInstance().AttachListener(std::move(fileLogListenerRet.second)); } - auto fileAttachment = cLogger::GetInstance().AttachListener(std::move(fileLogListenerRet.second)); LOG("--- Started Log ---"); diff --git a/src/main.cpp b/src/main.cpp index 4ae54511b..de194dc64 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -391,6 +391,7 @@ static std::unique_ptr<cMemorySettingsRepository> ParseArguments(int argc, char TCLAP::SwitchArg crashDumpFull ("", "crash-dump-full", "Crashdumps created by the server will contain full server memory", cmd); TCLAP::SwitchArg crashDumpGlobals("", "crash-dump-globals", "Crashdumps created by the server will contain the global variables' values", cmd); TCLAP::SwitchArg noBufArg ("", "no-output-buffering", "Disable output buffering", cmd); + TCLAP::SwitchArg noFileLogArg ("", "no-log-file", "Disable logging to file", cmd); TCLAP::SwitchArg runAsServiceArg ("d", "service", "Run as a service on Windows, or daemon on UNIX like systems", cmd); cmd.parse(argc, argv); @@ -413,6 +414,10 @@ static std::unique_ptr<cMemorySettingsRepository> ParseArguments(int argc, char repo->AddValue("Server", "Ports", std::to_string(port)); } } + if (noFileLogArg.getValue()) + { + repo->AddValue("Server", "DisableLogFile", true); + } if (commLogArg.getValue()) { g_ShouldLogCommIn = true; |