Qt日志记录

1、调用系统调试输出信息:qInstallMessageHandler(Gd::SystemMsg);

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    qInstallMessageHandler(Gd::SystemMsg);
    MainWindow w;
    w.show();
    Gd::sqlHelper.LogAdd(1,"启动软件","",false);
    return a.exec();
}

void Gd::SystemMsg(QtMsgType type, const QMessageLogContext &content, const QString &msg)
{
    QString LogHead;
    switch (type) {
    case QtDebugMsg:
        LogHead = QString("QtDebugMsg");
        break;
    case QtInfoMsg:
        LogHead = QString("QtInfoMsg");
        break;
    case QtWarningMsg:
        LogHead = QString("QtWarningMsg");
        break;
    case QtCriticalMsg:
        LogHead = QString("QtCriticalMsg");
        break;
    case QtFatalMsg:
        LogHead = QString("QtFatalMsg");
        break;
    }
    QString LogContent=QString("【%1】【%2】【%3】【%4】").arg(content.file).arg(content.line).arg(content.function).arg(msg);
    sqlHelper.LogAdd(0,LogHead,LogContent,LogHead=="QtFatalMsg");
}

2、Release模式需要修改.pro文件:DEFINES +=  QT_MESSAGELOGCONTEXT

qInstallMessageHandler默认在debug模式下输出QMessageLogContext 信息;

  • 修改.pro文件后记得清空构建路径文件中的文件,重新qmake一下
#-------------------------------------------------
#
# Project created by QtCreator 2023-02-13T12:00:07
#
#-------------------------------------------------

QT       += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport


TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS\ QT_MESSAGELOGCONTEXT

3、日志存库

  •  日志采用批量事务提交:

             QSqlDatabase::database().transaction();

             QSqlDatabase::database().rollback();

             QSqlDatabase::database().commit();

  • 系统日志保存时去除单引号'
        if(logHead.contains("'"))
            logHead=logHead.replace("'","");
        if(logContent.contains("'"))
            logContent=logContent.replace("'","");
    
 struct logModel{
        QString LogCreateDateTime=(QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss");
        int     LogType;
        QString LogHead;
        QString LogContent;
    };

void SQLiteHelper::LogAdd(int logType,QString logHead,QString logContent,bool isInsert)
{
    if(logHead.contains("'"))
        logHead=logHead.replace("'","");
    if(logContent.contains("'"))
        logContent=logContent.replace("'","");
    logModel model;
    model.LogType=logType;
    model.LogHead=logHead;
    model.LogContent=logContent;
    logsList.append(model);
    QString sql;
    if(logsList.count()>=100||isInsert)
    {
        QSqlDatabase::database().transaction();
        bool havError=false;
        for(int i=0;i<logsList.count();i++)
        {
            sql=QString(R"(INSERT INTO Log (LogCreateDateTime,LogType,LogHead,LogContent) VALUES ('%1','%2','%3','%4');)").arg(logsList[i].LogCreateDateTime,QString::number(logsList[i].LogType),logsList[i].LogHead,logsList[i].LogContent);
            if(!SQLiteHelper::query.exec(sql))
                havError=true;
        }
        if(havError)
            QSqlDatabase::database().rollback();
        else
        {
            QSqlDatabase::database().commit();
            logsList.clear();
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt 中,您可以通过以下方法设置创建调试日志的路径: 1. 在 main 函数中设置日志路径: ``` #include <QCoreApplication> #include <QLoggingCategory> #include <QDebug> #include <QFile> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 设置日志路径 QString logPath = "debug.log"; QFile file(logPath); file.open(QIODevice::WriteOnly | QIODevice::Append); qInstallMessageHandler([](QtMsgType type, const QMessageLogContext &context, const QString &msg) { QTextStream out(&file); switch (type) { case QtDebugMsg: out << "Debug: " << msg << endl; break; case QtWarningMsg: out << "Warning: " << msg << endl; break; case QtCriticalMsg: out << "Critical: " << msg << endl; break; case QtFatalMsg: out << "Fatal: " << msg << endl; abort(); } }); qInfo() << "Hello, world!"; return a.exec(); } ``` 2. 使用 qInstallMessageHandler 函数设置日志路径: ``` #include <QCoreApplication> #include <QLoggingCategory> #include <QDebug> #include <QFile> // 日志处理函数 void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { static QFile file("debug.log"); if (!file.isOpen()) { file.open(QIODevice::WriteOnly | QIODevice::Append); } QTextStream out(&file); switch (type) { case QtDebugMsg: out << "Debug: " << msg << endl; break; case QtWarningMsg: out << "Warning: " << msg << endl; break; case QtCriticalMsg: out << "Critical: " << msg << endl; break; case QtFatalMsg: out << "Fatal: " << msg << endl; abort(); } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 设置日志处理函数 qInstallMessageHandler(messageHandler); qInfo() << "Hello, world!"; return a.exec(); } ``` 以上两种方法都会在程序运行时创建一个名为 debug.log 的文件,并将日志记录到该文件中。您可以将文件名更改为您想要的任何名称和路径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值