c++项目实战---->QT文件日志输出

QT说明文档(输出详细日志)

  #include <qapplication.h>
  #include <stdio.h>
  #include <stdlib.h>

  void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
  {
      QByteArray localMsg = msg.toLocal8Bit();
      switch (type) {
      case QtDebugMsg:
          fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      case QtInfoMsg:
          fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      case QtWarningMsg:
          fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      case QtCriticalMsg:
          fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      case QtFatalMsg:
          fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      }
  }

  int main(int argc, char **argv)
  {
      qInstallMessageHandler(myMessageOutput);
      QApplication app(argc, argv);
      ...
      return app.exec();
  }

所需头文件

// Qt 之 qInstallMessageHandler(输出详细日志)
#include <QString>
#include <QFile>
#include <QMutex>
#include <QTextStream>
#include <QDateTime>
#include <QDir>

输出日志重定向

//qInstallMessageHandler(myMessageOutput); // 调用

// 保存从文件中读取的配置信息
struct log_parameter{
    // 构造函数初始化列表
    log_parameter():
        log_folder_path("../log/Manager/"),
        max_files(24),
        min_severity_level(1)
    { }

    QString log_folder_path;
    int max_files;
    int min_severity_level;
};
static log_parameter parameter; // 全局变量

// 重定向输出至日志文件
static void myMessageOutput(QtMsgType type,const QMessageLogContext &context,const QString &msg)
{
	// 上锁
	static QMutex mutex;
    mutex.lock();

    QString text;
    switch (type) {
    case QtDebugMsg:
        text = QString("Debug:");
        break;
    case QtWarningMsg:
        text = QString("Warning:");
        break;
    case QtCriticalMsg:
        text = QString("Critial:");
        break;
    case QtInfoMsg:
        text = QString("Info:");
        break;
    case QtFatalMsg:
        text = QString("Fatal:");
        break;
    }
	
	// 设置输出信息格式
    QString context_info = QString("%1:%2 Line:(%3)")
            .arg(QString(context.file)).arg(QString(context.function)).arg(context.line);

    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
    QString current_date = QString("(%1)").arg(current_date_time);

    QString message = QString("%1 %2 %3 %4")
            .arg(current_date).arg(text).arg(context_info).arg(msg)

    // 输出信息至文件
    QDir dir(parameter.log_folder_path);
    if ( !dir.exists()) // 路径不存在就创建
    {
        dir.mkpath(parameter.log_folder_path); // 创建多级目录。成功返回true
    }
    QString file_name = parameter.log_folder_path + current_date_time.left(10) + ".log";
    QFile file(file_name);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Append)) // 无法写入时(只写或者追加的形式打开)
    {
        mutex.unlock();
        return;
    }
    QTextStream text_stream(&file); // 定向到日志输出到哪个文件中
    text_stream << message << "\r\n"; // message为类似 qDebug,qInfo << 形式
    
    // 用完之后擦屁股
    file.flush();
    file.close();
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值