开发者

Qt打印信息输出到日志文件中的两种方法

目录
  • 1、简述
  • 2、效果图
  • 3、方法一 利用ofstream实现文件存储
    • 3.1、增加头文件引用
    • 3.2、增加全局变量
    • 3.3、定义函数
    • 3.4、增加注册信息及记录到文件中
  • 4、方法二 利用QFile记录文件
    • 4.1、增加头文件引用
    • 4.2、定义函数
    • 4.3、增加注册信息
  • 5、注意事项

    1、简述

    最近在研究把 Qt 的打印信息 输出的到日志文件中,文件存储尝试了2种方法。

    2、效果图

    Qt打印信息输出到日志文件中的两种方法

    3、方法一 利用ofstream实现文件存储

    利用ofstream文件写操作,将内存数据写入存储文件。

    找到main.cpp:

    3.1、增加头文件引用

    #include <QDateTime>
    #include <QDebug>
    #include <fstream>      // std::ofstream

    3.2、增加全局变量

    std::ofstream g_OutputDebug;

    3.3、定义函数

    void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
    {
        // 加锁
        static QMutex mutex;
        mutex.lock(); 
        QString text;
        switch(type) {
        case QtDebugMsg:
            text = QString("Debug: ");
            break;
        case QtWarningMsg:
            text = QString("Warning: ");
            break;
        case QtCriticalMsg:
            text = QString("Critical:");
            break;
        case QtFatalMsg:
            text = QString("Fatal: ");
            break;
        default:
            text = QString("Debug: ");
        }
     
        QString context_info = QString("F:(%1) L:(%2)").arg(QString(context.file)).arg(context.line); // F文件信息L行数
        QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
        QString current_date = QString("(%1)").arg(current_date_time);
        std::string message = qPrintable(QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(current_date).arg(msg));
        g_OutputDebug << message << "\r\n"; // std::ofstream
        // 解锁
        mutex.unlock();
    }

    3.4、增加注册信息及记录到文件中

    int main(int argc, char *argv[])
    {
        //注册MessageHandler
        qInstallMessageHandler(outputMessage); //注册MessageHandler
        g_OutputDebug.open(qPrintable(QString(QString(QDateTime::currentDateTime(php).toString("yyyy-MM-dd-hh-mm-ss").append("-log.txt")))), std::IOS::out | std::ios::trunc);
     
        QApplication a(argc, argv);
        MainWindow w; 
        w.show();
        return a.exec();
    }

    4、方法二 利用QFile记录文件

    4.1、增加头文件引用

    #include <QDateTime>
    #include <QDebug>
     
    #include <QFile>

    4.2、定义函数

    void androidoutputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
    {
        // 加锁
        static QMutex mutex;
        mutex.lock();
        QByteArray localMsg = msg.toLocal8pythonBit();
        QString text;
        switch(type) {
        case QtDebugMsg:
            text = QString("Debug: ");
            break;
        case QtWarningMsg:
            text = QString("Warning: ");
            break;
        case QtCriticalMsg:
            text = QString("Critical:");
            break;
        case QtFatalMsg:
            text = QString("Fatal: ");
            break;
        default:
            text = QString("Debug: ");
        }
     
        // 设置输出信息格式
        QString context_info = QString("F2:(%1) L:(%2)").arg(QString(context.file)).arg(context.line); // F文件L行数
        QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
        QString strMessage = QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(strDateTime).arg(msg);
        // 输出信息至文件中(读写、追加形式)
        QFile file(CODE_SYSTEM_BACKER_PATH+QString(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").append("-log.txt")));
        file.open(QIODevice::Readwrite | QIODevice::Append);
        QTextStream stream(&file);
        stream << strMessage << "\r\n";
        file.flush();
        file.close();
        // 解锁
        mutex.unlock();
    }

    4.3、增加注册信息

    int main(int argc, char *argv[])
    {
        //注册MessageHandler
        qInstallMessageHandler(outputMessage); //注册MessageHandler
     
        QApplication a(argc, argv);
        MainWindow w; 
        w.show();
    编程客栈    return a.exec();
    }

    5、注意事项

    Release版本稍许有编程些不同,需要引用DEFINES += QT_MESSAGELOGCONTEXT到Pro中

    到此这篇关于Qt打印信息输出到日志文件中的两种方法的文章就介绍到这了,更多相关Qt打印信息输出到文件内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜