Qt之日志输出文件

技术标签: qt  qdebug重定向  qt写log  qt日志

    做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪、定位,Qt也提供的类似的机制。之前用Qt4做项目时使用的是Qt::qInstallMsgHandler(),到了Qt5,使用了新的Qt::qInstallMessageHandler()来替代,详情请查看Qt助手(C++ API changes)。

描述
    助手中在C++ API changes中提到:Qt::qDebug()、Qt::qWarning()、Qt::qCritical()、Qt::qFatal()被改变为宏来跟踪源代码的消息来源。被打印的信息可以被配置(用于缺省消息处理程序),通过设置该新的环境变量QT_MESSAGE_PATTERN。Qt::qInstallMsgHandler()已过时,因此建议使用Qt::qInstallMessageHandler()来代替。

级别
  • qDebug:调试信息
  • qWarning:警告信息
  • qCritical:严重错误
  • qFatal:致命错误


官方示例
Qt之日志输出文件
   
    需求(目的):生成log.txt日志文件,记录详细日志信息(包括等级、所在文件、所在行号、描述信息、产生时间等),以便于快速跟踪、定位。

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 << “\r\n”;
    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();
}

效果如下:
Qt之日志输出文件

注:
    技术在于交流、沟通,转载请注明出处并保持作品的完整性。



来源:网络


智能推荐

PreScan仿真输出文件解析

环境:Matlab 2016a,PreScan8.5.0 1 标记需要输出的信号     标记需要输出的仿真信号,可以用To Workspace模块,也可以用log功能。               2 解析SimulationOutput...

xtb输出文件的结构

昨晚第一次调用xtb成功,现就输出文件的各个部分作总结: 提交命令以后先是声明,然后是cite: 这是一些初始化的信息 这是收敛信息。 又是一些设置。 迭代过程中的能量变化。 轨道信息 各任务时间占比 总能量和自洽场收敛的能量SCC之间是有差别的,SCC只是迭代的电子能,下面的2.3指的是原子核间的排斥能: 轨道信息 这个是啥不知道 大概就是每个原子的信息 各个键的键级 偶极矩等性质 对重要信息再...

VASP输出文件——OUTCAR,OSZICAR

本文转载于微信公众号,VASP学习交流,将会持续更新 OUTCAR OUTCAR一开始告诉VASP的版本信息,在多少个核上运行,  以及服务器的相关情况 VASP都会输出一个大大的WARNING,不用care,但是还需要辨别WARNING给出的信息 紧接着WARNING下面是POTCAR、INCAR、POSCAR、KPOINTS的基本信息 POTCAR该含有的全部在OUTCAR...

(四)mysql常用命令之日志文件

日志文件概述 日志文件记录了影响mysql数据库的各种类型活动。 错误日志 错误日志文件对mysql的启动,运行,关闭过程进行了记录。 我们首先检索到log_error文件的位置,然后我们去查看这个日志文件的信息。 通过cat 命令查看错误日志文件的内容 慢查询日志 慢查询日志是用来记录一些需要优化的sql语句的,通过一些参数来控制,不满足参数的将记 录到慢查询日志中。 long_query_ti...

MySQL基础之日志

配置文件/etc/my.ini 或者 /etc/my.cnf 日志类型:错误日志,记录mysql服务异常                  查询日志,记录建立的客户端连接和查询语句      ...

猜你喜欢

python之日志

日志等级(level) 描述 DEBUG 最详细的日志信息,典型应用场景是 问题诊断 INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 CRITICAL 当发生严重...

redis中的hash扩容渐进式rehash过程

背景: redis字典(hash表)当数据越来越多的时候,就会发生扩容,也就是rehash 对比:java中的hashmap,当数据数量达到阈值的时候(0.75),就会发生rehash,hash表长度变为原来的二倍,将原hash表数据全部重新计算hash地址,重新分配位置,达到rehash目的 redis中的hash表采用的是渐进式hash的方式: 1、redis字典(hash表)底层有...

不同系统下的回车\r和换行\n,及其历史

2019独角兽企业重金招聘Python工程师标准>>>      我们平时按下键盘上的‘回车键’,就能实现回车换行【我们在屏幕上所看到的就是光标移到了下一行的开头位置!!ps:不讨论软件实现的特殊功能,如word里的回车智能缩进】。因此对这个按键更准确说应该叫做‘回车换行键’ 就且将这种将光标移到下行开...

windows操作系统,python环境下django的自动安装

首先,在Windows操作系统下安装python,完成python环境的搭建。(我看有的博客需要配置环境变量,其实不必要,因为我们在安装的时候只要勾选如下图所示即可避免不必要的麻烦) 第二步,使用快捷键windows+R或者点击如下图所示,之后点击运行 在其中输入cmd即可进入dos命令。 第三步,输入以下命令 就会自动安装,等待安装完成即可。 第四步,检测django是否安装成功,如果出现如下图...

Qt之日志输出文件

    做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪、定位,Qt也提供的类似的机制。之前用Qt4做项目时使用的是Qt::qInstallMsgHandler(),到了Qt5,使用了新的Qt::qInstallMessageHandler()来替代,详情请查看Qt助手(C++ API changes)。 描述     助手中在C++ API ...

问答精选

How to get the sum of rows using a vector and the make the result in a column

I have a dataframe and i want to calculate the sum of variables present in a vector in every row and make the sum in other variable after i want the name of new variable created to be from the name of...

Call a custom class in zend framework

I have a very rough project that done partially in zend framework (not ZF2). The 'application', 'library' and 'public' folders are on the same root. Now i need to create a library 'Anil' in the 'libra...

Hide Some Of The Categories In Magento?

I want to hide some of the categories from magento home page. I have created some categories like New Arrivals, Special Offer Which I would like to show in some different way may be in left panel or r...

Reading an internal file in Android Studio

I am writing to an internal file in Android Studio The code lets me write lines of data split with commas. I am able to then go to another activity and read it all out at once. However I want to be ab...

Rails Acts_as_votable Gem Like/Unlike Buttons with Ajax

I'm new to Ruby On Rails, I used the acts_as_votable gem to create Like and Unlike Buttons to make Users like and unlike Posts but I can't make them change from Like to Unlike (and viceversa) and upda...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答