AsyncFw 1.2
Async Framework is c++ runtime with timers, poll notifiers, sockets, coroutines, etc.
 
Loading...
Searching...
No Matches
log-types.hpp
1/*
2Copyright (c) 2026 Alexandr Kuzmuk
3
4This file is part of the AsyncFw project. Licensed under the MIT License.
5See {Link: LICENSE file https://mit-license.org} in the project root for full license information.
6*/
7
8#pragma once
9
10#include <string>
11
12namespace AsyncFw {
13class LogStream;
14LogStream &operator<<(LogStream &, const std::wstring &);
15} // namespace AsyncFw
16
17#ifdef USE_QAPPLICATION
18 #include <QDebug>
19 #include <QJsonDocument>
20 #include <QJsonObject>
21
22 #undef qDebug
23 #undef qInfo
24 #undef qWarning
25 #undef qCritical
26
27 #define qDebug QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).debug
28 #define qInfo QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).info
29 #define qWarning QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).warning
30 #define qCritical QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).critical
31
32namespace AsyncFw {
33inline void qtMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
34 QByteArray name(LogStream::sender(context.function).c_str());
35 QByteArray note((context.line) ? QByteArray(context.file) + ":" + QByteArray::number(context.line) : "");
36 switch (static_cast<int>(type)) {
37 case QtDebugMsg: LogStream::message({+LogStream::Debug | LogStream::DarkYellow, name.data(), ("(Qt) " + msg.toUtf8()).data(), note.data()}, LOG_STREAM_CONSOLE_COLOR | LOG_STREAM_CONSOLE_EXTEND); break;
38 case QtInfoMsg: LogStream::message({+LogStream::Info | LogStream::DarkGreen, name.data(), ("(Qt) " + msg.toUtf8()).data(), note.data()}, LOG_STREAM_CONSOLE_COLOR | LOG_STREAM_CONSOLE_EXTEND); break;
39 case QtWarningMsg: LogStream::message({+LogStream::Warning | LogStream::DarkBlue, name.data(), ("(Qt) " + msg.toUtf8()).data(), note.data()}, LOG_STREAM_CONSOLE_COLOR | LOG_STREAM_CONSOLE_EXTEND); break;
40 case QtCriticalMsg: LogStream::message({+LogStream::Error | LogStream::DarkRed, name.data(), ("(Qt) " + msg.toUtf8()).data(), note.data()}, LOG_STREAM_CONSOLE_COLOR | LOG_STREAM_CONSOLE_EXTEND); break;
41 case QtFatalMsg:
42 fprintf(stderr, "(Qt) Fatal error: %s\nprogramm exit\n", msg.toUtf8().data());
43 fflush(stderr);
44 break;
45 default:
46 fprintf(stderr, "(Qt) Warning: unknown log message type: %d\n", static_cast<int>(type));
47 fflush(stderr);
48 break;
49 }
50}
51
52inline LogStream &operator<<(LogStream &log, const QByteArray &v) {
53 if (v.isEmpty()) log << "\"\"";
54 else { log << v.toStdString(); }
55 return log;
56}
57inline LogStream &operator<<(LogStream &log, const QString &v) {
58 if (v.isEmpty()) log << "\"\"";
59 else { log << v.toStdString(); }
60 return log;
61}
62inline LogStream &operator<<(LogStream &log, const QJsonObject &v) {
63 if (v.isEmpty()) log << "{}";
64 else { log << QJsonDocument(v).toJson().toStdString(); }
65 return log;
66}
67} // namespace AsyncFw
68#endif
The LogStream class.
Definition LogStream.h:44