Merge pull request #3568 from daniellimws/logging-backends
Logging: Add customizable backends
This commit is contained in:
commit
1b94f25e6c
17 changed files with 405 additions and 24 deletions
|
@ -28,6 +28,8 @@ add_executable(citra-qt
|
|||
configuration/configure_system.h
|
||||
configuration/configure_web.cpp
|
||||
configuration/configure_web.h
|
||||
debugger/console.h
|
||||
debugger/console.cpp
|
||||
debugger/graphics/graphics.cpp
|
||||
debugger/graphics/graphics.h
|
||||
debugger/graphics/graphics_breakpoint_observer.cpp
|
||||
|
@ -165,6 +167,14 @@ if (APPLE)
|
|||
target_sources(citra-qt PRIVATE ${MACOSX_ICON})
|
||||
set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE TRUE)
|
||||
set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
|
||||
elseif(WIN32)
|
||||
# compile as a win32 gui application instead of a console application
|
||||
target_link_libraries(citra-qt PRIVATE Qt5::WinMain)
|
||||
if(MSVC)
|
||||
set_target_properties(citra-qt PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
|
||||
elseif(MINGW)
|
||||
set_target_properties(citra-qt PROPERTIES LINK_FLAGS_RELEASE "-mwindows")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
create_target_directory_groups(citra-qt)
|
||||
|
|
|
@ -231,6 +231,7 @@ void Config::ReadValues() {
|
|||
UISettings::values.confirm_before_closing = qt_config->value("confirmClose", true).toBool();
|
||||
UISettings::values.first_start = qt_config->value("firstStart", true).toBool();
|
||||
UISettings::values.callout_flags = qt_config->value("calloutFlags", 0).toUInt();
|
||||
UISettings::values.show_console = qt_config->value("showConsole", false).toBool();
|
||||
|
||||
qt_config->beginGroup("Multiplayer");
|
||||
UISettings::values.nickname = qt_config->value("nickname", "").toString();
|
||||
|
@ -391,6 +392,7 @@ void Config::SaveValues() {
|
|||
qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing);
|
||||
qt_config->setValue("firstStart", UISettings::values.first_start);
|
||||
qt_config->setValue("calloutFlags", UISettings::values.callout_flags);
|
||||
qt_config->setValue("showConsole", UISettings::values.show_console);
|
||||
|
||||
qt_config->beginGroup("Multiplayer");
|
||||
qt_config->setValue("nickname", UISettings::values.nickname);
|
||||
|
|
|
@ -2,13 +2,26 @@
|
|||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QUrl>
|
||||
#include "citra_qt/configuration/configure_debug.h"
|
||||
#include "citra_qt/debugger/console.h"
|
||||
#include "citra_qt/ui_settings.h"
|
||||
#include "common/file_util.h"
|
||||
#include "common/logging/backend.h"
|
||||
#include "common/logging/filter.h"
|
||||
#include "common/logging/log.h"
|
||||
#include "core/core.h"
|
||||
#include "core/settings.h"
|
||||
#include "ui_configure_debug.h"
|
||||
|
||||
ConfigureDebug::ConfigureDebug(QWidget* parent) : QWidget(parent), ui(new Ui::ConfigureDebug) {
|
||||
ui->setupUi(this);
|
||||
this->setConfiguration();
|
||||
connect(ui->open_log_button, &QPushButton::pressed, []() {
|
||||
QString path = QString::fromStdString(FileUtil::GetUserPath(D_LOGS_IDX));
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(path));
|
||||
});
|
||||
}
|
||||
|
||||
ConfigureDebug::~ConfigureDebug() {}
|
||||
|
@ -17,11 +30,20 @@ void ConfigureDebug::setConfiguration() {
|
|||
ui->toggle_gdbstub->setChecked(Settings::values.use_gdbstub);
|
||||
ui->gdbport_spinbox->setEnabled(Settings::values.use_gdbstub);
|
||||
ui->gdbport_spinbox->setValue(Settings::values.gdbstub_port);
|
||||
ui->toggle_console->setEnabled(!Core::System::GetInstance().IsPoweredOn());
|
||||
ui->toggle_console->setChecked(UISettings::values.show_console);
|
||||
ui->log_filter_edit->setText(QString::fromStdString(Settings::values.log_filter));
|
||||
}
|
||||
|
||||
void ConfigureDebug::applyConfiguration() {
|
||||
Settings::values.use_gdbstub = ui->toggle_gdbstub->isChecked();
|
||||
Settings::values.gdbstub_port = ui->gdbport_spinbox->value();
|
||||
UISettings::values.show_console = ui->toggle_console->isChecked();
|
||||
Settings::values.log_filter = ui->log_filter_edit->text().toStdString();
|
||||
Debugger::ToggleConsole();
|
||||
Log::Filter filter;
|
||||
filter.ParseFilterString(Settings::values.log_filter);
|
||||
Log::SetGlobalFilter(filter);
|
||||
Settings::Apply();
|
||||
}
|
||||
|
||||
|
|
|
@ -72,6 +72,47 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Logging</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Global Log Filter</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="log_filter_edit"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="toggle_console">
|
||||
<property name="text">
|
||||
<string>Show Log Console (Windows Only)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="open_log_button">
|
||||
<property name="text">
|
||||
<string>Open Log Location</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
|
|
39
src/citra_qt/debugger/console.cpp
Normal file
39
src/citra_qt/debugger/console.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
// Copyright 2018 Citra Emulator Project
|
||||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
|
||||
#include <wincon.h>
|
||||
#endif
|
||||
|
||||
#include "citra_qt/debugger/console.h"
|
||||
#include "citra_qt/ui_settings.h"
|
||||
#include "common/logging/backend.h"
|
||||
|
||||
namespace Debugger {
|
||||
void ToggleConsole() {
|
||||
#ifdef _WIN32
|
||||
FILE* temp;
|
||||
if (UISettings::values.show_console) {
|
||||
if (AllocConsole()) {
|
||||
// The first parameter for freopen_s is a out parameter, so we can just ignore it
|
||||
freopen_s(&temp, "CONIN$", "r", stdin);
|
||||
freopen_s(&temp, "CONOUT$", "w", stdout);
|
||||
freopen_s(&temp, "CONOUT$", "w", stderr);
|
||||
Log::AddBackend(std::make_unique<Log::ColorConsoleBackend>());
|
||||
}
|
||||
} else {
|
||||
if (FreeConsole()) {
|
||||
// In order to close the console, we have to also detach the streams on it.
|
||||
// Just redirect them to NUL if there is no console window
|
||||
Log::RemoveBackend(Log::ColorConsoleBackend::Name());
|
||||
freopen_s(&temp, "NUL", "r", stdin);
|
||||
freopen_s(&temp, "NUL", "w", stdout);
|
||||
freopen_s(&temp, "NUL", "w", stderr);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} // namespace Debugger
|
14
src/citra_qt/debugger/console.h
Normal file
14
src/citra_qt/debugger/console.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
// Copyright 2018 Citra Emulator Project
|
||||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace Debugger {
|
||||
|
||||
/**
|
||||
* Uses the WINAPI to hide or show the stderr console. This function is a placeholder until we can
|
||||
* get a real qt logging window which would work for all platforms.
|
||||
*/
|
||||
void ToggleConsole();
|
||||
} // namespace Debugger
|
|
@ -19,6 +19,7 @@
|
|||
#include "citra_qt/compatdb.h"
|
||||
#include "citra_qt/configuration/config.h"
|
||||
#include "citra_qt/configuration/configure_dialog.h"
|
||||
#include "citra_qt/debugger/console.h"
|
||||
#include "citra_qt/debugger/graphics/graphics.h"
|
||||
#include "citra_qt/debugger/graphics/graphics_breakpoints.h"
|
||||
#include "citra_qt/debugger/graphics/graphics_cmdlists.h"
|
||||
|
@ -35,6 +36,7 @@
|
|||
#include "citra_qt/ui_settings.h"
|
||||
#include "citra_qt/updater/updater.h"
|
||||
#include "citra_qt/util/clickable_label.h"
|
||||
#include "common/common_paths.h"
|
||||
#include "common/logging/backend.h"
|
||||
#include "common/logging/filter.h"
|
||||
#include "common/logging/log.h"
|
||||
|
@ -387,6 +389,7 @@ void GMainWindow::RestoreUIState() {
|
|||
|
||||
ui.action_Show_Status_Bar->setChecked(UISettings::values.show_status_bar);
|
||||
statusBar()->setVisible(ui.action_Show_Status_Bar->isChecked());
|
||||
Debugger::ToggleConsole();
|
||||
}
|
||||
|
||||
void GMainWindow::ConnectWidgetEvents() {
|
||||
|
@ -1335,8 +1338,7 @@ void GMainWindow::SyncMenuUISettings() {
|
|||
#endif
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
Log::Filter log_filter(Log::Level::Info);
|
||||
Log::SetFilter(&log_filter);
|
||||
Log::AddBackend(std::make_unique<Log::ColorConsoleBackend>());
|
||||
|
||||
MicroProfileOnThreadCreate("Frontend");
|
||||
SCOPE_EXIT({ MicroProfileShutdown(); });
|
||||
|
@ -1354,7 +1356,12 @@ int main(int argc, char* argv[]) {
|
|||
|
||||
GMainWindow main_window;
|
||||
// After settings have been loaded by GMainWindow, apply the filter
|
||||
Log::Filter log_filter;
|
||||
log_filter.ParseFilterString(Settings::values.log_filter);
|
||||
Log::SetGlobalFilter(log_filter);
|
||||
FileUtil::CreateFullPath(FileUtil::GetUserPath(D_LOGS_IDX));
|
||||
Log::AddBackend(
|
||||
std::make_unique<Log::FileBackend>(FileUtil::GetUserPath(D_LOGS_IDX) + LOG_FILE));
|
||||
|
||||
main_window.show();
|
||||
return app.exec();
|
||||
|
|
|
@ -67,6 +67,9 @@ struct Values {
|
|||
QString room_port;
|
||||
uint host_type;
|
||||
qulonglong game_id;
|
||||
|
||||
// logging
|
||||
bool show_console;
|
||||
};
|
||||
|
||||
extern Values values;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue