v2.0.0
Loading...
Searching...
No Matches
mne_logger.cpp
Go to the documentation of this file.
1//=============================================================================================================
35
36//=============================================================================================================
37// INCLUDES
38//=============================================================================================================
39
40#include <iostream>
41#include <string>
42#include "mne_logger.h"
43
44//=============================================================================================================
45// QT INCLUDES
46//=============================================================================================================
47
48#include <QtGlobal>
49#include <QDateTime>
50#include <QMutexLocker>
51
52//=============================================================================================================
53// USED NAMESPACES
54//=============================================================================================================
55
56using namespace UTILSLIB;
57
58//=============================================================================================================
59// Definitions
60//=============================================================================================================
61
62#ifdef WIN32
63 #include <wchar.h>
64 #include <windows.h>
65 #define COLOR_INFO "\033[32;1m"
66 #define COLOR_DEBUG "\033[32;1m"
67 #define COLOR_WARN "\033[33;1m"
68 #define COLOR_CRITICAL "\033[31;1m"
69 #define COLOR_FATAL "\033[33;1m"
70 #define COLOR_RESET "\033[0m"
71#else
72 #define COLOR_INFO "\033[32;1m" //green
73 #define COLOR_DEBUG "\033[32;1m" //green
74 #define COLOR_WARN "\033[33;1m" //yellow
75 #define COLOR_CRITICAL "\033[31;1m" //red
76 #define COLOR_FATAL "\033[33;1m" //yellow
77 #define COLOR_RESET "\033[0m" //reset
78#endif
79
80std::mutex MNELogger::m_mutex;
81
82//=============================================================================================================
83// DEFINE MEMBER METHODS
84//=============================================================================================================
85
86void MNELogger::customLogWriter(QtMsgType type,
87 const QMessageLogContext &context,
88 const QString &msg)
89{
90 Q_UNUSED(context)
91
92 // Map Qt message type to numeric level (must match CMake MNE_LOG_LEVEL values)
93 // 0=DEBUG, 1=INFO, 2=WARN, 3=CRIT, 4=FATAL
94 int msgLevel = 0;
95 switch(type) {
96 case QtDebugMsg: msgLevel = 0; break;
97 case QtInfoMsg: msgLevel = 1; break;
98 case QtWarningMsg: msgLevel = 2; break;
99 case QtCriticalMsg: msgLevel = 3; break;
100 case QtFatalMsg: msgLevel = 4; break;
101 default: msgLevel = 0; break;
102 }
103
104#ifdef MNE_LOG_LEVEL
105 if (msgLevel < MNE_LOG_LEVEL)
106 return;
107#endif
108
109 std::string text = msg.toStdString();
110
111 std::lock_guard<std::mutex> lock(m_mutex);
112
113#ifdef MNE_LOG_MODE_FORMATTED
114 static bool s_startOfLine = true;
115
116 // Determine color and level tag
117 const char* color = COLOR_RESET;
118 const char* level = "";
119 switch(type) {
120 case QtDebugMsg: color = COLOR_DEBUG; level = "[DEBUG] "; break;
121 case QtInfoMsg: color = COLOR_INFO; level = "[INFO] "; break;
122 case QtWarningMsg: color = COLOR_WARN; level = "[WARN] "; break;
123 case QtCriticalMsg: color = COLOR_CRITICAL; level = "[CRIT] "; break;
124 case QtFatalMsg: color = COLOR_FATAL; level = "[FATAL] "; break;
125 default: level = ""; break;
126 }
127
128 // Uncomment the following line to include date/time in log prefix:
129 // std::string sDateTime = QDateTime::currentDateTime().toString("dd/MM/yyyy hh:mm:ss.z ").toStdString();
130 std::string sDateTime;
131
132 std::string prefix = std::string(color) + sDateTime + level + COLOR_RESET;
133
134 // Walk through the message character by character.
135 // Print the prefix only at the start of each new line.
136 for (size_t i = 0; i < text.size(); ++i) {
137 if (s_startOfLine && text[i] != '\n') {
138 std::cout << prefix;
139 s_startOfLine = false;
140 }
141 std::cout << text[i];
142 if (text[i] == '\n') {
143 s_startOfLine = true;
144 }
145 }
146
147 if (text.empty() || text.back() != '\n') {
148 std::cout << '\n';
149 s_startOfLine = true;
150 }
151#else
152 // PLAIN mode: raw text, like printf
153 std::cout << text;
154 if (text.empty() || text.back() != '\n') {
155 std::cout << '\n';
156 }
157#endif
158
159 std::cout.flush();
160}
#define COLOR_INFO
#define COLOR_RESET
#define COLOR_DEBUG
#define COLOR_CRITICAL
#define COLOR_WARN
#define COLOR_FATAL
Contains the declaration of the MNELogger class.
Shared utilities (I/O helpers, spectral analysis, layout management, warp algorithms).
static void customLogWriter(QtMsgType type, const QMessageLogContext &context, const QString &msg)