Ho iniziato a utilizzare Qt5 pochi giorni fa. Avevo bisogno di un logger per la mia app e ho deciso di utilizzare qDebug
, ma sembra che debba essere "reindirizzato" per avere i registri in un file.Qt5: Come usare qDebug() per accedere a un file, applicazione multi-thread
Ho usato qInstallMessageHandler
per farlo e ho scritto il mio gestore come illustrato di seguito (ispirato da altre persone qui).
Sembra che funzioni, ma poiché non sono un guru, devo chiedere: È corretto utilizzarlo in un'applicazione multithread o no?
Inoltre, se è ok/sicuro per l'utilizzo in un'applicazione multi-thread, può essere migliorato in qualche modo?
Grazie!
void MessageHandler(QtMsgType type, const QMessageLogContext & context, const QString & msg)
{
mutex.lock();
QDateTime dateTime(QDateTime::currentDateTime());
QString timeStr(dateTime.toString("dd-MM-yyyy HH:mm:ss:zzz"));
QString contextString(QString("(%1, %2)").arg(context.file).arg(context.line));
QFile outFile("file.log");
outFile.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream stream(&outFile);
stream << timeStr << " " << contextString << ": " << msg << endl;
mutex.unlock();
}
Quale tipo ha la variabile 'mutex'? –
mutex QMutex statico; // variabile globale –
Per quale sistema operativo stai sviluppando? –