#include "LogManager.h" #include #include #include #include #define hlog_disable() logger_set_level(hlog, LOG_LEVEL_SILENT); LogManager::LogManager() { hlog_disable(); } void LogManager::init() { auto console_sink = std::make_shared(); console_sink->set_level(spdlog::level::warn); console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v"); _logger = QSharedPointer(new spdlog::logger("logger", {console_sink})); qInstallMessageHandler(LogManager::messageHandler); } void LogManager::messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { // 将 QString 转换为 UTF-8 编码的 std::string QByteArray byteArray = msg.toUtf8(); std::string utf8Msg(byteArray.constData(), byteArray.size()); switch (type) { //< 这里根据自己的需求可以将qt的 不同种类输出 重定向到 自己需要的日志输出接口中 case QtDebugMsg: { LogManager::instance()._logger->debug(utf8Msg); spdlog::debug(utf8Msg); } break; case QtInfoMsg: { LogManager::instance()._logger->info(utf8Msg); spdlog::info(utf8Msg); } break; case QtWarningMsg: { LogManager::instance()._logger->warn(utf8Msg); spdlog::warn(utf8Msg); } break; case QtCriticalMsg: { LogManager::instance()._logger->critical(utf8Msg); spdlog::critical(utf8Msg); } break; case QtFatalMsg: { LogManager::instance()._logger->critical(utf8Msg); spdlog::critical(utf8Msg); } } }