Я начал использовать Qt5 несколько дней назад. Мне нужно было logger для моего приложения, и я решил использовать qDebug
, но, похоже, он должен быть «перенаправлен», чтобы иметь журналы в файле.Qt5: Как использовать qDebug() для входа в файл, многопоточного приложения
Я использовал qInstallMessageHandler
, чтобы сделать это, и я написал свой собственный обработчик, как показано ниже (вдохновленный другими людьми здесь).
Кажется, что это работает, но поскольку я не гуру, я должен спросить: Можно ли использовать это в многопоточном приложении или нет?
Кроме того, если это нормально/безопасно для использования в приложении с несколькими потоками, можете ли это как-то улучшить?
Спасибо!
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();
}
У какого типа есть переменная 'mutex'? –
статический мьютекс QMutex; // глобальная переменная –
Для какой ОС вы разрабатываете? –