1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| #include "Logger.h" #include <QDateTime> #include <QFileInfo> #include <Windows.h> #include <cstdio>
namespace Logger {
void customMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg) { QString timeText = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); QString file = QFileInfo(context.file ? context.file : "no-file").fileName(); QString function = context.function ? context.function : "no-function";
QString typeStr = typeToString(type);
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO consoleInfo; GetConsoleScreenBufferInfo(hConsole, &consoleInfo); WORD originalAttrs = consoleInfo.wAttributes;
QString firstPart = QString("%1 ").arg(timeText); fprintf(stderr, "%s", firstPart.toLocal8Bit().constData());
WORD colorAttrs = 0; switch (type) { case QtDebugMsg: colorAttrs = FOREGROUND_BLUE | FOREGROUND_INTENSITY; break; case QtInfoMsg: colorAttrs = FOREGROUND_GREEN | FOREGROUND_INTENSITY; break; case QtWarningMsg: colorAttrs = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY; break; case QtCriticalMsg: colorAttrs = FOREGROUND_RED | FOREGROUND_INTENSITY; break; default: colorAttrs = originalAttrs; } SetConsoleTextAttribute(hConsole, colorAttrs);
QString coloredPart = QString("[%1]").arg(typeStr); fprintf(stderr, "%s", coloredPart.toLocal8Bit().constData());
SetConsoleTextAttribute(hConsole, originalAttrs);
QString lastPart = QString(" (%1:%2, %3): %4\n").arg(file).arg(context.line).arg(function).arg(msg); fprintf(stderr, "%s", lastPart.toLocal8Bit().constData());
HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE); if (hStdIn != INVALID_HANDLE_VALUE) { SetConsoleTextAttribute(hStdIn, originalAttrs); }
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); if (hStdOut != INVALID_HANDLE_VALUE) { SetConsoleTextAttribute(hStdOut, originalAttrs); } }
QString typeToString(QtMsgType type) { switch (type) { case QtDebugMsg: return "Debug"; case QtInfoMsg: return "Info"; case QtWarningMsg: return "Warning"; case QtCriticalMsg: return "Critical"; default: return "Unknown"; } }
}
|