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 加入
还未添加个人简介







    
评论