Qt之qInstallMessageHandler(实践)

本文介绍了一种在QT中自定义日志记录的方法,包括如何添加头文件、定义输出格式、注册MessageHandler等步骤,并讨论了这种方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加头文件:


#include <QDateTime>
#include <QFile>
#include <QTextStream>


定义输出格式:


void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
//去除qt不必要的log信息
if (msg.contains("Unknown property min-weidth") || msg.contains("content-type missing in HTTP POST")
|| msg.contains("the source rect is not contained by the pixmap's rectangle") )
{
return;
}


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(current_date).arg(text).arg(context_info).arg(msg);


QString logFile = QCoreApplication::applicationDirPath() + "/log.txt";
QFile file(logFile);
file.open(QIODevice::WriteOnly | QIODevice::Append);
if (file.size() >= 10 * 1024 * 1024) //文件达到10M后先备份再清空
{
QFile::remove("log_00.txt");//删除原来的备份文件
file.copy("log_00.txt");    //拷贝文件至备份文件
file.resize(0);             //清空文件内容
}
QTextStream text_stream(&file);
text_stream << message << "\r\n";
file.flush();
file.close();


mutex.unlock();
}


注册MessageHandler:
int main()
{
//注册MessageHandler
qInstallMessageHandler(outputMessage);


}


打印日志会不会影响程序运行的流畅性??会不会带来卡的感觉??


debug release 都会有打印信息,ms级打印,时效性是够用的(想一些QT本身开发时,打印调试信息的实效就好理解了)


弊端:


这种方式,可以理解为重写了QT原本的输出格式。


enum QtMsgType { QtDebugMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtSystemMsg = QtCriticalMsg };

没法添加新的QtMsgType,灵活性不够
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值