From e7d571c8daf3ca97645434fef48563c3eae2edbd Mon Sep 17 00:00:00 2001 From: Stephen Miller <56742918+StevenMiller123@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:00:21 -0500 Subject: [PATCH] Common: Restore old log filter behavior (#4336) * Restore old log filter behavior Not sure exactly why this hadn't happened yet. * Suggested change * Update documentation to include changes * Remove mention of debug log class Debug is both a valid class and level, kinda confusing to use it as an example in my opinion. * Error instead of assert * Missing include --- documents/Debugging/Debugging.md | 10 +++++----- src/common/logging/log.cpp | 14 ++++++++++---- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/documents/Debugging/Debugging.md b/documents/Debugging/Debugging.md index 82a93e670..0ccef6bf0 100644 --- a/documents/Debugging/Debugging.md +++ b/documents/Debugging/Debugging.md @@ -64,13 +64,13 @@ You can configure the emulator by editing the `config.toml` file found in the `u - It can be beneficial to set this to `false` for better performance. - When communicating about issues with games and the log messages aren't clear due to potentially confusing order, set this to `true` and send that log instead. - `filter`: Sets the logging category for various logging classes. - - Format: `=,...` - - Multiple classes can be set by separating them with a comma. (example: `Render=warning,Debug=critical,Lib.Pad=error`) + - Format: `: ...` + - Multiple classes can be set by separating them with a space. (example: `Render:Warning Lib.Pad:Error`) - Sub-classes can be specified in the same format as seen in the console/log (such as `Core.Linker`). - - Valid log levels: `trace, debug, info, warning, error, critical` - in this order, setting a level silences all levels preceding it and logs every level after it. + - Valid log levels: `trace, debug, info, warning, error, critical, off` - in this order, setting a level silences all levels preceding it and logs every level after it. - Examples: - - If the log is being spammed with messages coming from Lib.Pad, you can use `Lib.Pad=critical` to only log critical-level messages. - - If you'd like to mute everything, but still want to receive messages from Vulkan rendering: `off,Render.Vulkan=info` (if you want critical at least `critical,Render.Vulkan=info`) + - If the log is being spammed with messages coming from Lib.Pad, you can use `Lib.Pad:Critical` to only log critical-level messages. + - If you'd like to mute everything, but still want to receive messages from Vulkan rendering: `*:Off Render.Vulkan:Info` (if you want critical at least `*:Critical Render.Vulkan:Info`) - `skipDuplicate`: Skip same lines with a `Skipped N duplicate messages..` message (`true`/`false`) - By default, the emulator will skip same lines for `maxSkipDuration` milliseconds. - `append`: Append log to the existing file (`true`/`false`) diff --git a/src/common/logging/log.cpp b/src/common/logging/log.cpp index 511eda668..c8bfbdb4d 100644 --- a/src/common/logging/log.cpp +++ b/src/common/logging/log.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include +#include #include #include "common/assert.h" @@ -200,12 +201,17 @@ void Setup(std::string_view log_filename) { std::unordered_map log_level_per_class; if (EmulatorSettings.IsLogEnable()) { - for (const auto class_level : std::views::split(EmulatorSettings.GetLogFilter(), ',')) { + for (const auto class_level : std::views::split(EmulatorSettings.GetLogFilter(), ' ')) { const auto class_level_pair = - std::views::split(class_level, '=') | std::ranges::to>(); + std::views::split(class_level, ':') | std::ranges::to>(); - if (class_level_pair.size() == 1) { - default_log_level = spdlog::level_from_str(class_level_pair.front() | + if (class_level_pair.size() != 2) { + std::cerr << "bad log filter provided" << std::endl; + continue; + } + + if (class_level_pair.front()[0] == '*') { + default_log_level = spdlog::level_from_str(class_level_pair.back() | std::ranges::to()); } else { log_level_per_class[class_level_pair.front() | std::ranges::to()] =