2020-02-21 00:45:53 +07:00
|
|
|
#include "debug.h"
|
|
|
|
|
|
2020-04-04 00:47:49 +07:00
|
|
|
#include <QDateTime>
|
|
|
|
|
#include <QFileInfo>
|
|
|
|
|
#include <QMessageBox>
|
|
|
|
|
#include <QMutex>
|
|
|
|
|
#include <QThread>
|
|
|
|
|
|
|
|
|
|
namespace
|
|
|
|
|
{
|
|
|
|
|
QtMessageHandler original = nullptr;
|
|
|
|
|
QMutex mutex;
|
|
|
|
|
QFile file;
|
|
|
|
|
QTextStream stream;
|
|
|
|
|
|
|
|
|
|
void handler(QtMsgType type, const QMessageLogContext &context,
|
|
|
|
|
const QString &msg)
|
|
|
|
|
{
|
|
|
|
|
const auto typeName = QMap<QtMsgType, QByteArray>{{QtDebugMsg, " DEBUG "},
|
|
|
|
|
{QtInfoMsg, " INFO "},
|
|
|
|
|
{QtWarningMsg, " WARN "},
|
|
|
|
|
{QtCriticalMsg, " CRIT "},
|
|
|
|
|
{QtFatalMsg, " FATAL "}}
|
|
|
|
|
.value(type);
|
|
|
|
|
|
|
|
|
|
const auto message =
|
|
|
|
|
QDateTime::currentDateTime().toString(Qt::ISODate).toUtf8() + ' ' +
|
|
|
|
|
QByteArray::number(qintptr(QThread::currentThreadId())) + ' ' +
|
|
|
|
|
QFileInfo(context.file).fileName().toUtf8() + ':' +
|
|
|
|
|
QByteArray::number(context.line) + typeName + msg.toUtf8() + '\n';
|
|
|
|
|
|
|
|
|
|
SOFT_ASSERT(original, return );
|
|
|
|
|
original(type, context, msg);
|
|
|
|
|
|
|
|
|
|
QMutexLocker locker(&mutex);
|
|
|
|
|
file.write(message);
|
|
|
|
|
}
|
|
|
|
|
} // namespace
|
|
|
|
|
|
2020-02-21 00:45:53 +07:00
|
|
|
namespace debug
|
|
|
|
|
{
|
2020-04-10 00:37:50 +07:00
|
|
|
std::atomic_bool isTrace = false;
|
2020-04-04 00:47:49 +07:00
|
|
|
|
|
|
|
|
QString traceFileName()
|
|
|
|
|
{
|
|
|
|
|
QMutexLocker locker(&mutex);
|
|
|
|
|
return file.fileName();
|
2020-02-21 00:45:53 +07:00
|
|
|
}
|
2020-04-04 00:47:49 +07:00
|
|
|
|
|
|
|
|
bool setTraceFileName(const QString &fileName)
|
|
|
|
|
{
|
|
|
|
|
QMutexLocker locker(&mutex);
|
|
|
|
|
|
|
|
|
|
original = nullptr;
|
|
|
|
|
qInstallMessageHandler(nullptr);
|
|
|
|
|
|
|
|
|
|
if (file.isOpen())
|
|
|
|
|
file.close();
|
|
|
|
|
|
|
|
|
|
if (fileName.isEmpty())
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
file.setFileName(fileName);
|
|
|
|
|
|
|
|
|
|
if (!file.open(QFile::WriteOnly | QFile::Unbuffered))
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
original = qInstallMessageHandler(handler);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace debug
|