Qt知识点梳理 —— 记录程序运行日志并分类保存

3、日志格式需要固定;

代码实现


使用函数**QtMessageHandler qInstallMessageHandler(QtMessageHandler);**来实现,是全局的;

参考说明文档首先定义并实现函数 MessWriteLog

void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);

日志等级:

  • qDebug:调试信息

  • qWarning:警告信息

  • qCritical:错误信息

具体实现:

//写日志功能

void MessWriteLog(QtMsgType type, const QMessageLogContext &context, const QString &msg)

{

//定义日志文件存放路径

QString logDir = QApplication::applicationDirPath() + “\RunLog\” + QDateTime::currentDateTime().toString(“yyyy_MM_dd”)+“\”;

QString logFile;

QDir curDir(logDir);

if(!curDir.exists(logDir))//如果路径不存在则创建

{

curDir.mkpath(logDir);

qDebug() << logDir;

}

static QMutex mutex;//互斥量

mutex.lock();

QString contextType;//日志类型

switch(type)

{

case QtDebugMsg:

logFile=logDir+“Debug”;

contextType = QString(“Debug”);

break;

case QtWarningMsg:

logFile=logDir+“Warning”;

contextType = QString(“Warning”);

break;

case QtCriticalMsg:

logFile=logDir+“Critical”;

contextType = QString(“Critical”);

break;

case QtFatalMsg:

logFile=logDir+“Fatal”;

contextType = QString(“Fatal”);

}

QString contextInfo = QString(“[%1: %2]”).arg(QString(context.file)).arg(context.line);//代码所在文件及行数

QString contextTime = QDateTime::currentDateTime().toString(“yyyy-MM-dd hh:mm:ss.mmm”);//当前时间

QString mess = QString(“%1: [%2] %3: %4”).arg(contextTime).arg(contextType).arg(contextInfo).arg(msg);//一行日志信息

QFile contextFile(logFile+“.log”);

contextFile.open(QIODevice::WriteOnly | QIODevice::Append);//以只写或追加方式打开文件

QTextStream contextStream(&contextFile);//定义文件流

contextStream << mess << “\r\n”;//将文件流写入文件

contextFile.flush();

contextFile.close();

mutex.unlock();//释放互斥量

}

main函数中调用:

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

qInstallMessageHandler(MessWriteLog);//安装消息处理程序

MainWindow w;

w.show();

return a.exec();

}

程序调用


MainWindow::MainWindow(QWidget *parent)
QMainWindow(parent)

, ui(new Ui::MainWindow)

{

ui->setupUi(this);

//打印日志到文件中

qDebug(“This is a debug message”);

qWarning(“This is a warning message”);

qCritical(“This is a critical message”);

}

那么如何才能正确的掌握Redis呢?

为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题

  • 并发编程面试题汇总

  • JVM面试题汇总

  • Netty常被问到的那些面试题汇总

  • Tomcat面试题整理汇总

  • Mysql面试题汇总

  • Spring源码深度解析

  • Mybatis常见面试题汇总

  • Nginx那些面试题汇总

  • Zookeeper面试题汇总

  • RabbitMQ常见面试题汇总

JVM常频面试:

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(一)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(二)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Redis常见面试题汇总(300+题)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

找小编(vip1024c)领取
.(img-WyvkpnKk-1721719755001)]

Mysql面试题汇总(一)

[外链图片转存中…(img-D0XbDtQH-1721719755001)]

Mysql面试题汇总(二)

[外链图片转存中…(img-J6kqaZyi-1721719755002)]

Redis常见面试题汇总(300+题)

[外链图片转存中…(img-mLrCkocl-1721719755002)]

找小编(vip1024c)领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值