Files
pcsx2/3rdparty/kddockwidgets/tests/fatal_logger.cpp
2025-11-18 14:18:26 -07:00

58 lines
1.7 KiB
C++

/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2023 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "fatal_logger.h"
#include "core/Logging_p.h"
#include "core/Platform.h"
#include "core/Utils_p.h"
using namespace KDDockWidgets;
FatalLogger::~FatalLogger() = default;
void FatalLogger::log(const spdlog::details::log_msg &msg)
{
if (msg.level < spdlog::level::err) {
// Nothing to do if less than err
spdlog::sinks::stdout_color_sink_mt::log(msg);
return;
}
const std::string expectedWarning = Core::Platform::instance()->m_expectedWarning;
if (!expectedWarning.empty() && stringContains(std::string_view(msg.payload.data()), expectedWarning)) {
// It's whitelisted, downgrade to warning level
spdlog::details::log_msg copy = msg;
copy.level = spdlog::level::warn;
spdlog::sinks::stdout_color_sink_mt::log(copy);
return;
}
spdlog::sinks::stdout_color_sink_mt::log(msg);
spdlog::critical("KDDockWidgets should be error free. Aborting tests.");
std::terminate();
}
std::shared_ptr<spdlog::logger> FatalLogger::create()
{
if (spdlog::get(KDDockWidgets::spdlogLoggerName())) {
// doesn't happen
spdlog::critical("Tests bug, install the FatalLogger earlier.");
std::terminate();
}
auto logger = std::make_shared<spdlog::logger>(KDDockWidgets::spdlogLoggerName(), std::make_shared<FatalLogger>());
spdlog::register_logger(logger);
return logger;
}