美文网首页C++
35.QT重定向日志系统--Apple的学习笔记

35.QT重定向日志系统--Apple的学习笔记

作者: applecai | 来源:发表于2021-08-31 20:16 被阅读0次

    一,前言

    最近还是处于模仿阶段,就是看别人的工程来寻找学习点。今天练习中大型工程中需要的日志系统。

    二,需求

    自己移植一个日志系统到QT中,可以将信息以txt形式输出日志信息。

    三,设计

    我移植的日志系统是spdlog开源代码,先用mingw8.1编译成64bit的静态库文件。然后集成到QT中。此库API使用还是很容易的,参考其example及readme说明文件即可。

    四,遇到的问题

    1. QT中的5类日志信息如何重定向到此自定义的日志系统呢?
      答:网上能搜索到答案的。使用 qInstallMessageHandler 注册一个自定义的消息处理器。
    2. release情况下如何还能重定向?
      答:在.pro文件定义一个宏:DEFINES += QT_MESSAGELOGCONTEXT
    3. 核心代码
    void setupLogger(bool verbose)
    {
        qtDefaultLogger = spdlog::basic_logger_mt("RTESim-qt", "logs/basic-log.txt");//spdlog::stdout_color_mt("RTESim-qt");
        if (verbose) {
            qtDefaultLogger->set_level(spdlog::level::debug);
        }
        // 日志输出重定向
        qInstallMessageHandler([](QtMsgType type, const QMessageLogContext& context, const QString& msg) {
            QByteArray localMsg = msg.toLocal8Bit();
            switch (type) {
            case QtDebugMsg:
                qtDefaultLogger->debug(
                    "[{}@{}] {}", context.file ? localFile(context.file) : "", context.line, msg.toStdString());
                break;
            case QtInfoMsg:
                qtDefaultLogger->info(
                    "[{}@{}] {}", context.file ? localFile(context.file) : "", context.line, msg.toStdString());
                break;
            case QtWarningMsg:
                qtDefaultLogger->warn(
                    "[{}@{}] {}", context.file ? localFile(context.file) : "", context.line, msg.toStdString());
                break;
            case QtCriticalMsg:
                qtDefaultLogger->critical(
                    "[{}@{}] {}", context.file ? localFile(context.file) : "", context.line, msg.toStdString());
                break;
            case QtFatalMsg:
                qtDefaultLogger->error(
                    "[{}@{}] {}", context.file ? localFile(context.file) : "", context.line, msg.toStdString());
                std::abort();
            }
        });
    }
    

    五,小结

    我通过学习别人的工程,取其精华去其糟粕。掌握了日志系统的使用,哈哈~

    相关文章

      网友评论

        本文标题:35.QT重定向日志系统--Apple的学习笔记

        本文链接:https://www.haomeiwen.com/subject/xoioiltx.html