zoukankan      html  css  js  c++  java
  • Qt 输出日志到文件

    一、日志简介

    Qt有Debug、Warning、Info、Critical、Fatal五种级别的调试信息。
    qDebug:调试信息
    qWarning:警告信息
    qInfo:警告信息
    qCritical:严重错误
    qFatal:致命错误

    Qt4提供了qInstallMsgHandler(Qt5:qInstallMessageHandler)对qDebug、qWarning、qCritical、qFatal等函数输出信息的重定向处理。
    qInstallMsgHandler是一个回调函数,由qDebug、qWarnng、qCritical、qFatal函数进行触发,qDebug、qWarnng、qCritical、qFatal函数处理的消息文本会被qInstallMsgHandler所指向的回调函数截获,允许用户自己来处理输出的消息文本。

    二、源码

    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:");
        }
    
        QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
        QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
        QString current_date = QString("(%1)").arg(current_date_time);
        QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);
    
        QFile file("log.txt");
       file.open(QIODevice::WriteOnly | QIODevice::Append);
        QTextStream text_stream(&file);
        text_stream << message << "
    ";
        file.flush();
        file.close();
    
        mutex.unlock();
    }
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        //注册MessageHandler
       qInstallMessageHandler(outputMessage);
    
        //打印日志到文件中
        qDebug("This is a debug message");
        qWarning("This is a warning message");
        qCritical("This is a critical message");
        qFatal("This is a fatal message");
    
        return app.exec();
    }
    

    参考: 一去二三里 阿里云栖 oschina 定时清理

    作者:yusq77

    -------------------------------------------

    Wish you all the best and good health in 2021.

  • 相关阅读:
    linux父子进程问题
    Raft协议--中文论文介绍
    adb、pm命令操作apk包
    gradle配置
    命令行 更新Android sdk
    Gradle 脚本剪片---copy
    Java数组,去掉重复值、增加、删除数组元素
    注解Annotation 详解(转)
    MAC自带的SVN进行升级
    Android Studio 简单功能介绍
  • 原文地址:https://www.cnblogs.com/yusq77/p/13937355.html
Copyright © 2011-2022 走看看