[Qt] 日志输出到文件(qDebug\qWarning\qCritical\qFatal)

#ifndef LOGFILE_H
#define LOGFILE_H

#include <QMutex>
#include <QFile>
#include <QTextStream>
#include <QDateTime>

static QMutex mutex;

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QFile file("log.txt");

    if (!file.open(QIODevice::WriteOnly | QIODevice::Append))
        return ;

    mutex.lock();

    QString text;
    text = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");

    switch(type) {
    case QtDebugMsg:
        text += " Debug: ";
        break;
    case QtWarningMsg:
        text += " Warning: ";
        break;
    case QtCriticalMsg:
        text += " Critical: ";
        break;
    case QtFatalMsg:
        text += " Fatal: ";
        text += QString("File(%1) Line(%2) ").arg(context.file).arg(context.line);
        break;
    default:
        break;
    }

    QTextStream stream(&file);
    stream << text << msg << "\n";

    file.flush();
    file.close();

    mutex.unlock();
}

#endif // LOGFILE_H

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

猜你喜欢

转载自blog.csdn.net/u014671962/article/details/82786193