1. 程式人生 > 其它 >Qt實現寫日誌功能 (程式碼)

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();
}