2014-09-24 20 views
0

我在想如何將調試信息保存到名爲「LogFile-YYYYMMDDHHMMSS」的文件中。我用這樣的公式:如何將調試信息保存到qt中的特定文件?

QString dt = QDateTime::currentDateTime().toString("dd/MM/yyyy hh:mm:ss"); 
QString txt = QString("[%1] ").arg(dt); 

switch (type) 
{ 
    case QtDebugMsg: 
    txt += QString("{Debug} \t\t %1").arg(msg); 
    break; 
    case QtWarningMsg: 
    txt += QString("{Warning} \t %1").arg(msg); 
    break; 
    case QtCriticalMsg: 
    txt += QString("{Critical} \t %1").arg(msg); 
    break; 
    case QtFatalMsg: 
    txt += QString("{Fatal} \t\t %1").arg(msg); 
    abort(); 
    break; 
} 

QFile outFile(QString("LogFile.log"); 
outFile.open(QIODevice::WriteOnly | QIODevice::Append); 

QTextStream textStream(&outFile); 
textStream << txt << endl; 

回答

1

試試這個:

QString dt = "LogFile"; 
dt += QDateTime::currentDateTime().toString("dd/MM/yyyy hh:mm:ss"); 
dt.remove("/"); 
dt.remove(":"); 
dt += ".log"; 
QFile outFile(dt); 
utFile.open(QIODevice::WriteOnly | QIODevice::Append); 

QTextStream textStream(&outFile); 
textStream <<"test"; 
outFile.close(); 

因爲OS禁止使用該符號的文件的路徑和文件將無法保存您應該刪除這個符號。

或者用更簡單的方法:

QString dt = "LogFile"; 
dt += QDateTime::currentDateTime().toString("ddMMyyyy hhmmss"); 
dt += ".log"; 
+0

@hyde我認爲這對OP來說很重要,但現在我更容易理解所有和更新的答案。謝謝你的提示。 – Chernobyl 2014-09-24 17:38:56

+0

太棒了,我一直在尋找! – user932 2014-09-24 17:40:21

+0

實際上,由於問題在寫,因此需要兩個不同的'toString'調用,因爲日期組件的順序是不同的。 – hyde 2014-09-24 17:40:33

1

我想一個更好的答案使用一個單一的DateTime對象(curdt在我的例子),然後產生兩種類型串出一個對象。一個用於日誌信息裏面的是的日誌,以及日誌文件名稱本身。我們希望使用當前日期/時間的單個副本,以便我們在日誌文件中寫入的內容與日誌文件名中顯示的日期/時間相同(格式不同)。如果您兩次撥打QDateTime::currentDateTime(),可能會得到兩個稍微不同的時間。

/* Store a copy of the current date and time */ 
QDateTime curdt = QDateTime::currentDateTime(); 

/* Convert it to a string for logging */ 
QString dtstr = curdt.toString("dd/MM/yyyy hh:mm:ss"); 
QString txt = QString("[%1] ").arg(dtstr); 

/* Create a filename for the log */ 
QString logfilename = "LogFile-" + curdt.toString("yyyyMMddhhmmss") + ".log"; 

[snip] 

QFile outFile(logfilename); 
+1

我需要一些時間用這種格式重寫我的答案,但是你已經完成了這個任務,所以我不會重寫它(我已經提出了你的答案)。 – Chernobyl 2014-09-24 17:48:49

+0

沒問題。謝謝。這個至少處理兩種格式的日期/時間,並使用當前日期和時間的一個副本來完成。 – 2014-09-24 17:50:23

相關問題