Ich begann mit Qt5 vor ein paar Tagen. Ich brauchte einen Logger für meine App und ich entschied mich, qDebug
zu verwenden, aber es scheint, dass es "umgeleitet" werden muss, um die Protokolle in einer Datei zu haben.Qt5: So verwenden Sie qDebug(), um eine Datei, Multi-Thread-Anwendung einzuloggen
Ich benutzte qInstallMessageHandler
, um das zu tun, und ich schrieb meine eigene Handler wie unten dargestellt (inspiriert von anderen Menschen hier).
Es scheint, es funktioniert, aber da ich kein Guru bin, muss ich fragen: Ist es in Ordnung, dies in einer Multithread-Anwendung zu verwenden oder nicht?
Auch, wenn es in einer Multithread App in Ordnung/sicher ist, kann es irgendwie verbessert werden?
Danke!
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();
}
Welcher Typ hat Ihre Variable 'Mutex'? –
statischer QMutex Mutex; // globale Variable –
Für welches Betriebssystem entwickeln Sie? –