Qt之qInstallMessageHandler(重定向至文件)
简述
在Qt之qInstallMessageHandler(输出详细日志)一节中,我们讲解了如何使用自定义消息处理程序输出调试信息,而且可以很直观、很方便的得到输出代码所在的文件、函数、行号等信息。
当软件发布的时候,通常都会采用日志输出功能,方便我们后期的跟踪、查找问题。
自定义消息处理
下面,我们来根据需要自定义消息处理程序。其中输出格式包含:输出信息、文件、函数、行号、日期时间。这样就很利于我们追踪了。
效果
源码
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// 加锁
static QMutex mutex;
mutex.lock();
QByteArray localMsg = msg.toLocal8Bit();
QString strMsg("");
switch(type)
{
case QtDebugMsg:
strMsg = QString("Debug:");
break;
case QtWarningMsg:
strMsg = QString("Warning:");
break;
case QtCriticalMsg:
strMsg = QString("Critical:");
break;
case QtFatalMsg:
strMsg = QString("Fatal:");
break;
}
// 设置输出信息格式
QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
QString strMessage = QString("Message:%1 File:%2 Line:%3 Function:%4 DateTime:%5")
.arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function).arg(strDateTime);
// 输出信息至文件中(读写、追加形式)
QFile file("log.txt");
file.open(QIODevice::ReadWrite | QIODevice::Append);
QTextStream stream(&file);
stream << strMessage << "\r\n";
file.flush();
file.close();
// 解锁
mutex.unlock();
}
int main(int argc, char **argv)
{
// 安装消息处理程序
qInstallMessageHandler(myMessageOutput);
QApplication app(argc, argv);
// 打印信息
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();
}
这里,使用QMutex进行加锁、解锁操作,便于我们可以安全的在多线程操作中使用。QFile打开模式为QIODevice::ReadWrite | QIODevice::Append
(读写、追加模式),保证了输出信息可以以追加的形式写入文件。
更多参考
Qt之qInstallMessageHandler(重定向至文件)的更多相关文章
- Qt QDebug等重定向到文件中
源地址:http://blog.163.com/soyo_gogogo/blog/static/171414077201392705639321/ Qt的qDebug() 等函数,可以打印出十分细致的 ...
- Qt 之 qInstallMessageHandler(日志重定向至文件)
Qt 日志重定向到文件 #include <QCoreApplication> #include <QDebug> #include <QMutex> #inclu ...
- Qt之qInstallMessageHandler(输出详细日志)
简述 安装之前已定义的消息处理程序,返回一个指向前一个消息处理程序. 消息处理程序是一个函数,用于打印调试信息.警告信息.严重错误和致命的错误的消息.Qt库(debug模式)包含成百上千的警告信息打印 ...
- Linux下执行的java命令重定向到文件中的方法
在Linux下通常会执行如:java -version 的命令, 但是,命令只是打印到了屏幕上不能重定向到文件中或标准输出流中. 此时需要将错误输出流重定向到标准输出流中就可以得到了. 比如:java ...
- Qt之添加Windows资源文件(.rc文件)
简述 在Windows下使用Qt时,通常会用到Windows的资源文件 - 为exe设置信息,其中包括:文件说明.产品名称.产品版本.版权等信息... 由于是Windows平台相关的东西,Qt助手中对 ...
- 【C语言】重定向和文件
重定向和文件 一.相关基础知识 重定向:在计算机领域,重定向是大多数命令行解释器所具有的功能,包括各种可以将标准流重定向用户规定地点的Unix shells. 输入重定向:可以使程序能够使用文件代替键 ...
- Qt之生成Window资源文件(.rc 文件)
简述 qmake 可以随意地自动生成一个适当填充的 Windows 资源文件.本节主要讲解如何用 qmake 处理一个 Windows 资源文件,并将其链接到一个可执行应用程序(EXE)或动态链接库( ...
- 如何将top命令输出重定向为文件
命令: # top -b -n 2 -d 3 > /tmp/top.out 解析: -b: batch 模式,可以重定向到文件中 -n:一共取2次top数据 -d:每次top数据间隔为3秒
- Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕获sys.exit()调用 optparse argparse
Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和 ...
随机推荐
- Effective Scala
Effective Scala Marius Eriksen, Twitter Inc.marius@twitter.com (@marius)[translated by hongjiang(@ho ...
- bzoj3876: [Ahoi2014]支线剧情
神犇题解:http://blog.csdn.net/popoqqq/article/details/43024221 题意:给定一个DAG,1为起始点,任意一个点可以直接回到1,每条边有经过代价,求一 ...
- VS 2015 localhost访问有效 改用 IP访问 400错误 invalid hostname 修改方法
今天新起站点发现在Chrome浏览器中,通过localhost访问是有效的,但是通过本机IP甚至127.0.0.1访问无效, 报的错误是400 Bad Request Invalid HostName ...
- 显示图片的(自定义)吐司Toast
一般我们提示的时候都是直接提示文字的,其实Toast也可以显示图片 常用方法 Toast.makeText(context,text,duration)这返回一个Toast对象 toast.setDu ...
- python cmd下运行中文乱码 策略
如我运行一个脚本,执行后输出中文看不懂 然后呢在文件头加上 from __future__ import unicode_literals 注意:需要去掉所有字符串前的 u, 这样所有字符串均默认为u ...
- DOM操作 ——如何添加、移除、移动、复制、创建和查找节点等。
DOM操作 --如何添加.移除.移动.复制.创建和查找节点等. (1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个 ...
- SQL获取汉字首字母
)) ) as begin ) ) collate Chinese_PRC_CI_AS,letter )) insert into @t(chr,letter) select '吖','A' unio ...
- LeetCode 7 -- String to Integer (atoi)
Implement atoi to convert a string to an integer. 转换很简单,唯一的难点在于需要开率各种输入情况,例如空字符串,含有空格,字母等等. 另外需在写的时候 ...
- 安装PLSQL,登录报“无法解析指定的连接标识符的错误”
安装PLSQL,本地不需要安装oracle服务器,但要安装oracle客户端. 一.安装客户端需要配置服务命名,tnsnames.oRA文件和监听(因为我开始没有配置监听,所以一直报无法解析制定的连接 ...
- fcitx 候选词出现奇怪的笔画
原来fcitx还有笔画输入的功能,输入h出现一个横,s出现竖,p是撇,n是捺,z是折. 虽然很有意思,但是不实用,而且还会出现在第一页候选词中,影响输入,可以通过配置文件禁用掉: $ vim ~/.c ...