You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.7 KiB

3 days ago
#include "LogManager.h"
#include <hv/hlog.h>
#include <spdlog/sinks/daily_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <QtGlobal>
#define hlog_disable() logger_set_level(hlog, LOG_LEVEL_SILENT);
LogManager::LogManager()
{
hlog_disable();
}
void LogManager::init()
{
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
console_sink->set_level(spdlog::level::warn);
console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");
_logger = QSharedPointer<spdlog::logger>(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);
}
}
}