Qt之qInstallMessageHandler(重定向至文件)
2023-09-27 14:19:43 时间
简述
在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中获取文件路径、文件名、后缀
- Deepin(UOS使用linuxdeployqt打包qt程序【自测ok】
- QT 连接多个数据库,必须指定不同的连接名字
- Qt文件路径分隔符
- Qt操作xml文件(增删改功能)
- Qt中使用DOM解析XML文件或者字符串二(实例)
- qt中使用全局变量和静态变量示例(静态变量在.h文件中声明后必须在cpp文件中定义否则编译报错)
- Qt中一个信号连接多个槽函数后的执行顺序
- Qt中事件循环机制详解
- 【QT】无法在QT创建者中打开包含文件pcap.h(C1083)
- Qt Designer怎样加入资源文件
- 基于QT(C++)实现(窗体)UDP文件原型【100010516】
- Qt音视频开发07-合并音视频文件
- Qt音视频开发37-USB摄像头解码ffmpeg方案
- Qt开源作品18-无边框背景透明窗体
- Qt编写输入法V2019终极版
- Qt 4.5发布(最大的变动是换用LGPL许可证,移植进了苹果的Cocoa框架。之前的Qt只支持Carbon框架,现在的Qt 4.5两者都支持。单一源代码创建出支持32位或64位字节的Intel或PowerPC Mac二进制文件)
- Qt的编程风格与规范
- Qt之保存/恢复窗口的几何形状
- Qt之自定义界面(右下角冒泡)
- Qt编程之实现在QFileDialog上添加自定义的widget
- PyQt5利用Qt Designer制作一个可以拖动获取文件信息的页面