/* This file is part of KDDockWidgets. SPDX-FileCopyrightText: 2023 Klarälvdalens Datakonsult AB, a KDAB Group company Author: Sérgio Martins SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only Contact KDAB at 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 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(KDDockWidgets::spdlogLoggerName(), std::make_shared()); spdlog::register_logger(logger); return logger; }