diff --git a/src/common/log.cpp b/src/common/log.cpp index b1d6d8962..2906618ec 100644 --- a/src/common/log.cpp +++ b/src/common/log.cpp @@ -501,6 +501,9 @@ void Log::FileOutputLogCallback(void* pUserParam, MessageCategory cat, const cha void Log::SetFileOutputParams(bool enabled, const char* filename, bool timestamps /* = true */) { std::unique_lock lock(s_state.callbacks_mutex); + + s_state.file_output_timestamp = timestamps; + if (s_state.file_output_enabled == enabled) return; @@ -523,7 +526,6 @@ void Log::SetFileOutputParams(bool enabled, const char* filename, bool timestamp } s_state.file_output_enabled = enabled; - s_state.file_output_timestamp = timestamps; } Log::Level Log::GetLogLevel() diff --git a/src/core/settings.cpp b/src/core/settings.cpp index 7f2e53e90..4200dcf14 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -1164,6 +1164,7 @@ void Settings::SetDefaultLogConfig(SettingsInterface& si) si.SetBoolValue("Logging", "LogToDebug", false); si.SetBoolValue("Logging", "LogToWindow", false); si.SetBoolValue("Logging", "LogToFile", false); + si.SetBoolValue("Logging", "LogFileTimestamps", false); for (const char* channel_name : Log::GetChannelNames()) si.SetBoolValue("Logging", channel_name, true); @@ -1179,6 +1180,7 @@ void Settings::UpdateLogConfig(const SettingsInterface& si) const bool log_to_debug = si.GetBoolValue("Logging", "LogToDebug", false); const bool log_to_window = si.GetBoolValue("Logging", "LogToWindow", false); const bool log_to_file = si.GetBoolValue("Logging", "LogToFile", false); + const bool log_file_timestamps = si.GetBoolValue("Logging", "LogFileTimestamps", false); const bool any_logs_enabled = (log_to_console || log_to_debug || log_to_window || log_to_file); Log::SetLogLevel(any_logs_enabled ? log_level : Log::Level::None); @@ -1189,7 +1191,7 @@ void Settings::UpdateLogConfig(const SettingsInterface& si) if (log_to_file) { Log::SetFileOutputParams(log_to_file, Path::Combine(EmuFolders::DataRoot, "duckstation.log").c_str(), - log_timestamps); + log_file_timestamps); } else { diff --git a/src/duckstation-qt/advancedsettingswidget.cpp b/src/duckstation-qt/advancedsettingswidget.cpp index e88c535ba..20e169257 100644 --- a/src/duckstation-qt/advancedsettingswidget.cpp +++ b/src/duckstation-qt/advancedsettingswidget.cpp @@ -180,6 +180,11 @@ AdvancedSettingsWidget::AdvancedSettingsWidget(SettingsWindow* dialog, QWidget* SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.logToDebug, "Logging", "LogToDebug", false); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.logToWindow, "Logging", "LogToWindow", false); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.logToFile, "Logging", "LogToFile", false); + SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.logTimestamps, "Logging", "LogTimestamps", true); + SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.logFileTimestamps, "Logging", "LogFileTimestamps", false); + connect(m_ui.logToConsole, &QCheckBox::checkStateChanged, this, &AdvancedSettingsWidget::onAnyLogSinksChanged); + connect(m_ui.logToWindow, &QCheckBox::checkStateChanged, this, &AdvancedSettingsWidget::onAnyLogSinksChanged); + connect(m_ui.logToFile, &QCheckBox::checkStateChanged, this, &AdvancedSettingsWidget::onAnyLogSinksChanged); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.showDebugMenu, "Main", "ShowDebugMenu", false); @@ -205,6 +210,10 @@ AdvancedSettingsWidget::AdvancedSettingsWidget(SettingsWindow* dialog, QWidget* tr("Logs messages to the window.")); dialog->registerWidgetHelp(m_ui.logToFile, tr("Log To File"), tr("User Preference"), tr("Logs messages to duckstation.log in the user directory.")); + dialog->registerWidgetHelp(m_ui.logTimestamps, tr("Log Timestamps"), tr("User Preference"), + tr("Includes the elapsed time since the application start in window and console logs.")); + dialog->registerWidgetHelp(m_ui.logFileTimestamps, tr("Log File Timestamps"), tr("User Preference"), + tr("Includes the elapsed time since the application start in file logs.")); dialog->registerWidgetHelp(m_ui.showDebugMenu, tr("Show Debug Menu"), tr("Unchecked"), tr("Shows a debug menu bar with additional statistics and quick settings.")); } @@ -218,6 +227,16 @@ void AdvancedSettingsWidget::onLogChannelsButtonClicked() menu.exec(QCursor::pos()); } +void AdvancedSettingsWidget::onAnyLogSinksChanged() +{ + const bool log_to_console = m_dialog->getEffectiveBoolValue("Logging", "LogToConsole", false); + const bool log_to_window = m_dialog->getEffectiveBoolValue("Logging", "LogToWindow", false); + const bool log_to_file = m_dialog->getEffectiveBoolValue("Logging", "LogToFile", false); + + m_ui.logTimestamps->setEnabled(log_to_console || log_to_window); + m_ui.logFileTimestamps->setEnabled(log_to_file); +} + void AdvancedSettingsWidget::onShowDebugOptionsStateChanged() { const bool enabled = QtHost::ShouldShowDebugOptions(); diff --git a/src/duckstation-qt/advancedsettingswidget.h b/src/duckstation-qt/advancedsettingswidget.h index a1bb393a1..86dd52b1c 100644 --- a/src/duckstation-qt/advancedsettingswidget.h +++ b/src/duckstation-qt/advancedsettingswidget.h @@ -22,6 +22,7 @@ Q_SIGNALS: private Q_SLOTS: void onLogChannelsButtonClicked(); + void onAnyLogSinksChanged(); void onShowDebugOptionsStateChanged(); private: diff --git a/src/duckstation-qt/advancedsettingswidget.ui b/src/duckstation-qt/advancedsettingswidget.ui index 5ba4cf5c7..4116c78cf 100644 --- a/src/duckstation-qt/advancedsettingswidget.ui +++ b/src/duckstation-qt/advancedsettingswidget.ui @@ -58,10 +58,10 @@ - - + + - Log To System Console + Log To File @@ -72,6 +72,13 @@ + + + + Log To System Console + + + @@ -79,10 +86,17 @@ - - + + - Log To File + Log Timestamps + + + + + + + Log File Timestamps diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp index 130a42a9a..0cc04011c 100644 --- a/src/duckstation-qt/mainwindow.cpp +++ b/src/duckstation-qt/mainwindow.cpp @@ -2314,6 +2314,8 @@ void MainWindow::connectSignals() SettingWidgetBinder::BindWidgetToBoolSetting(nullptr, m_ui.actionLogToFile, "Logging", "LogToFile", false); SettingWidgetBinder::BindWidgetToBoolSetting(nullptr, m_ui.actionLogToWindow, "Logging", "LogToWindow", false); SettingWidgetBinder::BindWidgetToBoolSetting(nullptr, m_ui.actionLogTimestamps, "Logging", "LogTimestamps", true); + SettingWidgetBinder::BindWidgetToBoolSetting(nullptr, m_ui.actionLogFileTimestamps, "Logging", "LogFileTimestamps", + false); SettingWidgetBinder::BindWidgetToBoolSetting(nullptr, m_ui.actionEnableSafeMode, "Main", "DisableAllEnhancements", false); diff --git a/src/duckstation-qt/mainwindow.ui b/src/duckstation-qt/mainwindow.ui index 9c951b8a2..6b5ca5e0c 100644 --- a/src/duckstation-qt/mainwindow.ui +++ b/src/duckstation-qt/mainwindow.ui @@ -169,6 +169,7 @@ + @@ -955,6 +956,14 @@ Log Timestamps + + + true + + + Log File Timestamps + + true