在软件运行过程中,要记录下运行日志,方便后期开发人员追踪问题,qt可以通过下方函数实现,程序启动时在main函数中调用设置下即可
#include <QDateTime> #include <QFile> #include <QMutex> #include <QMutexLocker> #include <QDebug> void msgHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { static QMutex msgHandler_mutex; static QFile msgFile; QMutexLocker locker(&msgHandler_mutex); QByteArray localMsg = msg.toUtf8(); if (localMsg.length() > 20000) { localMsg = localMsg.mid(0, 20000) + "......"; } QString ds = QDateTime::currentDateTime().toString("yyyyMMdd"); if (!msgFile.isOpen()) { msgFile.setFileName(QString("%1/log-%2.txt").arg("E:/").arg(ds)); msgFile.open(QIODevice::WriteOnly | QIODevice::Append); } else { QString fn = msgFile.fileName(); if (!fn.contains(ds)) { msgFile.close(); msgFile.setFileName(QString("%1/log-%2.txt").arg("E:/").arg(ds)); msgFile.open(QIODevice::WriteOnly | QIODevice::Append); } } QString strMsg; switch(type) { case QtDebugMsg: // localMsg.startsWith("qD") ? localMsg.remove(0, 3) : strMsg QString("Debug:"); break; case QtWarningMsg: strMsg = QString("Warning:"); break; case QtCriticalMsg: strMsg = QString("Critical:"); break; case QtFatalMsg: strMsg = QString("Fatal:"); break; } QString strDateTime = QDateTime::currentDateTime().toString("HH:mm:ss.zzz"); QString strMessage = strMsg + localMsg + QString("[%1]").arg(strDateTime);
msgFile.write(strMessage.toUtf8() + "\r\n"); msgFile.flush(); fprintf(stderr, "%s\n", strMessage.toLocal8Bit().constData()); fflush(stderr); }