diff --git a/Source/Core/Common/Logging/LogManager.cpp b/Source/Core/Common/Logging/LogManager.cpp index 2c09bc5051a6..2aef9318e705 100644 --- a/Source/Core/Common/Logging/LogManager.cpp +++ b/Source/Core/Common/Logging/LogManager.cpp @@ -100,18 +100,33 @@ LogManager::LogManager() IniFile::Section* options = ini.GetOrCreateSection("Options"); bool write_file; bool write_console; + bool write_window; options->Get("WriteToFile", &write_file, false); options->Get("WriteToConsole", &write_console, true); + options->Get("WriteToWindow", &write_window, true); + + // Set up log listeners + int verbosity; + options->Get("Verbosity", &verbosity, 0); + + // Ensure the verbosity level is valid + if (verbosity < 1) + verbosity = 1; + if (verbosity > MAX_LOGLEVEL) + verbosity = MAX_LOGLEVEL; for (LogContainer* container : m_Log) { bool enable; logs->Get(container->GetShortName(), &enable, false); container->SetEnable(enable); + container->SetLevel(static_cast(verbosity)); if (enable && write_file) container->AddListener(LogListener::FILE_LISTENER); if (enable && write_console) container->AddListener(LogListener::CONSOLE_LISTENER); + if (enable && write_window) + container->AddListener(LogListener::LOG_WINDOW_LISTENER); } m_path_cutoff_point = DeterminePathCutOffPoint(); @@ -149,7 +164,8 @@ void LogManager::LogWithFullPath(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE LogTypes::LOG_LEVEL_TO_CHAR[(int)level], log->GetShortName().c_str(), temp); for (auto listener_id : *log) - m_listeners[listener_id]->Log(level, msg.c_str()); + if (m_listeners[listener_id]) + m_listeners[listener_id]->Log(level, msg.c_str()); } void LogManager::Init() diff --git a/Source/Core/Common/Logging/LogManager.h b/Source/Core/Common/Logging/LogManager.h index 0ec3c1f7de0b..6562a1705841 100644 --- a/Source/Core/Common/Logging/LogManager.h +++ b/Source/Core/Common/Logging/LogManager.h @@ -86,7 +86,7 @@ class LogManager : NonCopyable private: LogContainer* m_Log[LogTypes::NUMBER_OF_LOGS]; static LogManager* m_logManager; // Singleton. Ugh. - std::array m_listeners; + std::array m_listeners{}; size_t m_path_cutoff_point = 0; LogManager(); diff --git a/Source/Core/DolphinWX/LogWindow.cpp b/Source/Core/DolphinWX/LogWindow.cpp index 81817edba312..b7a9a34088b8 100644 --- a/Source/Core/DolphinWX/LogWindow.cpp +++ b/Source/Core/DolphinWX/LogWindow.cpp @@ -61,40 +61,6 @@ void CLogWindow::CreateGUIControls() log_window->Get("y", &y, Parent->GetSize().GetY()); log_window->Get("pos", &winpos, wxAUI_DOCK_RIGHT); - // Set up log listeners - int verbosity; - options->Get("Verbosity", &verbosity, 0); - - // Ensure the verbosity level is valid - if (verbosity < 1) - verbosity = 1; - if (verbosity > MAX_LOGLEVEL) - verbosity = MAX_LOGLEVEL; - - // Get the logger output settings from the config ini file. - options->Get("WriteToFile", &m_writeFile, false); - options->Get("WriteToWindow", &m_writeWindow, true); - - IniFile::Section* logs = ini.GetOrCreateSection("Logs"); - for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) - { - bool enable; - logs->Get(m_LogManager->GetShortName((LogTypes::LOG_TYPE)i), &enable, false); - - if (m_writeWindow && enable) - m_LogManager->AddListener((LogTypes::LOG_TYPE)i, LogListener::LOG_WINDOW_LISTENER); - else - m_LogManager->RemoveListener((LogTypes::LOG_TYPE)i, LogListener::LOG_WINDOW_LISTENER); - - if (m_writeFile && enable) - m_LogManager->AddListener((LogTypes::LOG_TYPE)i, LogListener::FILE_LISTENER); - else - m_LogManager->RemoveListener((LogTypes::LOG_TYPE)i, LogListener::FILE_LISTENER); - - m_LogManager->SetLogLevel((LogTypes::LOG_TYPE)i, (LogTypes::LOG_LEVELS)(verbosity)); - } - m_has_listeners = true; - // Font m_FontChoice = new wxChoice(this, wxID_ANY); m_FontChoice->Bind(wxEVT_CHOICE, &CLogWindow::OnFontChange, this); diff --git a/Source/Core/DolphinWX/LogWindow.h b/Source/Core/DolphinWX/LogWindow.h index 26d931d52bd8..65b98a8b2b92 100644 --- a/Source/Core/DolphinWX/LogWindow.h +++ b/Source/Core/DolphinWX/LogWindow.h @@ -45,8 +45,8 @@ class CLogWindow : public wxPanel, LogListener wxTimer m_LogTimer; LogManager* m_LogManager; std::queue> msgQueue; - bool m_writeFile, m_writeWindow, m_LogAccess; - bool m_has_listeners = false; + bool m_LogAccess; + bool m_has_listeners = true; // Controls wxBoxSizer* sBottom;