ScreenTranslator/src/service/debug.cpp

73 lines
1.7 KiB
C++
Raw Normal View History

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
{
std::atomic_bool isTrace;
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