写点什么

QT 项目第一弹 - 自定义日志输出

作者:springIce
  • 2024-02-01
    北京
  • 本文字数:1558 字

    阅读完需:约 5 分钟

QT项目第一弹-自定义日志输出

自定义日志输出

自定义日志输出基本功能

第一步 注册日志输出函数


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
用户头像

springIce

关注

还未添加个人签名 2019-09-23 加入

还未添加个人简介

评论

发布
暂无评论
QT项目第一弹-自定义日志输出_日志_springIce_InfoQ写作社区