Я начал использовать Qt5 несколько дней назад. Мне нужен регистратор для моего приложения, и я решил использовать qDebug
, но, похоже, он должен быть "перенаправлен", чтобы иметь журналы в файле.
Я использовал qInstallMessageHandler
чтобы сделать это, и я написал собственный обработчик, как 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();
}