QT 项目日志文件生成

背景

  • 在release环境下,我们是不能看到日志输出,当有问题的时候,也不找不到问题的所在,给开发造成了极大的困扰。
  • 下面的方法便可以解决这样的问题。

方法定义

// 日志生成
void LogOutTxt(QtMsgType type,const QMessageLogContext &context,const QString &msg){
#ifndef _DEBUG
    // 保证debug模式正常输出
    cout << msg.toStdString() << endl;
#endif
    mutex.lock();
    QString typeTxt;
    switch (type) {
    case QtDebugMsg:
         typeTxt = QString("Debug: "); // 调试信息
         break;
     case QtInfoMsg:
         typeTxt = QString("Info: ");
         break;
     case QtWarningMsg:
         typeTxt = QString("Warning: "); // 警告
         break;
     case QtCriticalMsg:
         typeTxt = QString("Critical: "); // 严重错误
         break;
     case QtFatalMsg:
         typeTxt = QString("Fatal: ");// 致命错误
         abort();
    default:
        break;
    }
    QString context_info = QString("File: (%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
    QString current_time = QString("(%1)").arg( QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd"));
    QString log = QString("%1 %2 %3\r\n%4").arg(typeTxt).arg(context_info).arg(current_time).arg(msg);

    QFile file;
    QString path = QString("log%1.txt").arg(timePoint);
    file.setFileName(path);
    if(!file.open(QIODevice::ReadWrite  | QIODevice::Append)){
        QString erinfo = file.errorString();
        cout << erinfo.toStdString() << endl;
        return;
    }
    QTextStream out(&file);
    out << "\r\n" << log;
    file.flush();
    file.close();
    mutex.unlock();
}

方法使用

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

#ifndef _DEBUG
    timePoint = QDateTime::currentDateTime().toString("yyyyMMddHHmmss");
    qInstallMessageHandler(LogOutTxt);
#endif
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    // 测试
    qDebug("This is a debug message");
    qWarning("This is a warning message");
    qCritical("This is a critical message");
    return a.exec();
}

遇到问题

问题

Release中输入日志的文件信息和行数为空

原因

Debug版本是可以输出日志信息的,而Release中输入日志的文件信息和行数为空。
原因是:Qt在Release版本默认舍弃了文件信息、行数等信息

解决方案:pro文件定义一个宏,然后qmake,最后编译即可

DEFINES += QT_MESSAGELOGCONTEXT

最终结果

点击获取源码

Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的功能和工具来开发大型项目Qt项目文件结构通常包括以下几个主要部分: 1. 源代码文件:这是项目的核心部分,包含了实现应用程序功能的C++源代码文件。这些文件通常以.cpp为扩展名。 2. 头文件:头文件包含了类、函数和变量的声明,用于在源代码中引用和使用。这些文件通常以.h为扩展名。 3. 资源文件:资源文件包含了应用程序使用的图像、字体、样式表等非代码资源。这些文件通常以.qrc为扩展名,使用Qt资源系统进行管理。 4. UI文件:UI文件是使用Qt的可视化设计工具Qt Designer创建的界面文件,它定义了应用程序的用户界面布局和组件。这些文件通常以.ui为扩展名。 5. 配置文件:配置文件包含了应用程序的配置信息,如数据库连接、日志级别等。这些文件可以使用各种格式,如XML、INI等。 6. 编译配置文件:编译配置文件用于指定项目的编译选项和依赖关系。在Qt中,常用的编译配置文件是.pro文件,它使用Qt的构建系统qmake进行管理。 7. 构建输出目录:构建输出目录是编译和构建过程生成的中间文件和最终可执行文件的存放位置。通常在项目根目录下创建一个build目录用于存放构建输出。 8. 其他辅助文件:除了上述主要部分外,大型Qt项目可能还包含其他辅助文件,如文档、测试脚本、第三方库等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值