Qt實現寫日誌功能 (程式碼)
預設情況下,除錯資訊僅記錄在debug版本下
release版本下要使用除錯資訊,需在.pro檔案中新增如下配置
DEFINES += QT_MESSAGELOGCONTEXT
需要在main()函式中新增啟動日誌的功能 ,如下
//qInstallMessageHandler(outputLog); //啟動日誌功能
實現程式碼如下:
void outputLog(QtMsgType msgType, const QMessageLogContext& logContent, const QString& msg)
{
static QMutex s_mutex;
s_mutex.lock();
QString text;
// 判斷感興趣的訊息
switch (msgType)
{
case QtDebugMsg:
text = QString("DEBUG:");
break;
case QtWarningMsg:
text = QString("WARNING:");
break;
case QtCriticalMsg:
text = QString("CRITICAL:");
break;
case QtFatalMsg:
text = QString("FATAL:");
break;
}
QString context_info = QString("File:(%1) Line(%2)").arg(QString(logContent.file)).arg(QString(logContent.line));
QString curr_dateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
QString curr_date = QString("%1").arg(curr_dateTime);
QString message = QString("%1 \r\n%2 %3 \r\n%4").arg(curr_date).arg(text).arg(context_info).arg(msg);
// 判斷檔案是否存在,不存在則建立
QString aFile = QDir::currentPath() + "/LogFile";
qDebug() << aFile;
QDir dir(aFile);
if(!dir.exists())
{
dir.mkdir(aFile);
}
QString curr_time = QDateTime::currentDateTime().toString("yyyyMMdd");
QFile filename(aFile+"/log"+curr_time+".log");
filename.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream textStream(&filename);
textStream << message << "\r\n\r\n";
filename.flush();
filename.close();
s_mutex.unlock();
}