QT 项目第一弹 - 自定义日志输出
作者:springIce
- 2024-02-01 北京
本文字数:1558 字
阅读完需:约 5 分钟

自定义日志输出
自定义日志输出基本功能
第一步 注册日志输出函数
int main(int argc, char *argv[]){ QApplication a(argc, argv);
/** * @Brief: 注册日志事件 * @Author: springIce * @Date: 2024-01-24 **/ qInstallMessageHandler(outputMessage);
/** * @Brief: 主界面展示 * @Author: springIce * @Date: 2024-01-24 **/ MainWindow w; w.show(); return a.exec();}
复制代码
第二步 实现自定义函数
#include <QTextStream>#include <QDateTime>#include <QMutex>#include <QFile>#include <QThread>
/**************************************************************** @Brief:* @Author: springIce* @Date: 2024-01-24****************************************************************/
QMutex myMutex;
void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg) { // 加锁 myMutex.lock();
//信息分类 QString formMsg = ""; switch(type) { case QtDebugMsg: formMsg = QString("Debug: "); break; case QtInfoMsg: formMsg = QString("Info: "); break; case QtWarningMsg: formMsg = QString("Warning: "); break; case QtCriticalMsg: formMsg = QString("Critical: "); break; case QtFatalMsg: formMsg = QString("Fatal: "); break;
default: break; }
//文件名、函数名、行数 formMsg += QString("%1 [%2: %3]").arg(context.file).arg(context.file).arg(context.line);
// 时间和内容 QString strDateTime = QDateTime::currentDateTime().toString("hh:mm:ss"); QString strMessage = QString("%1 %2:%3").arg(strDateTime).arg(formMsg).arg(msg);
#ifdef QT_DEBUG QTextStream qout(stdout); qout << strMessage << "\r\n";#else QThread::create([=](){ //写入文件 QFile file(logFileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Append)) { file.close(); return; }
QTextStream stream(&file); stream << strMessage << "\r\n";; file.flush(); file.close(); });#endif
// 解锁 myMutex.unlock();}
复制代码
以上就是简单的日志输出定义,可以去其它类中使用正常 qDebug 等即可
void MainWindow::on_pushButton_clicked(){ qDebug() << "Hello Logger";}
复制代码
自定义日志输出颜色
自定义输出函数 outputMessage 改为如下,其他不变
//文件名、函数名、行数 QString formMsg = QString("%1 [%2: %3]").arg(context.file).arg(context.file).arg(context.line);
//信息分类 switch(type) { case QtDebugMsg: formMsg = QString("\033[32m Debug: "); break; case QtInfoMsg: formMsg = QString("\033[34m Info: "); break; case QtWarningMsg: formMsg = QString("\033[33m Warning: "); break; case QtCriticalMsg: formMsg = QString("Critical: "); break; case QtFatalMsg: formMsg = QString("\033[31m Fatal: "); break;
default: break; }
复制代码
打印展示
void MainWindow::on_pushButton_clicked(){ qDebug() << "Greenn"; qWarning() << "Yelloww"; qInfo() << "Bluee"; qFatal("Redd");}
复制代码
展示效果图如下
划线
评论
复制
发布于: 刚刚阅读数: 7
版权声明: 本文为 InfoQ 作者【springIce】的原创文章。
原文链接:【http://xie.infoq.cn/article/48266949b9b66bf24d45aa03e】。文章转载请联系作者。
springIce
关注
还未添加个人签名 2019-09-23 加入
还未添加个人简介







评论