summaryrefslogtreecommitdiffstats
path: root/common/log.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-07-07 22:23:49 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-07-07 22:23:49 +0200
commitda2b049e248c1ad7efeb53685158a205335e4e36 (patch)
tree1e7e5e940e9b760b2108081b1d2f3879cebdb0ff /common/log.cpp
parent9bcb822963fc96c94dbe7dcc4134dcd2dac454ff (diff)
downloadsink-da2b049e248c1ad7efeb53685158a205335e4e36.tar.gz
sink-da2b049e248c1ad7efeb53685158a205335e4e36.zip
A new debug system.
Instead of a single #define as debug area the new system allows for an identifier for each debug message with the structure component.area. The component is a dot separated identifier of the runtime component, such as the process or the plugin. The area is the code component, and can be as such defined at compiletime. The idea of this system is that it becomes possible to i.e. look at the output of all messages in the query subsystem of a specific resource (something that happens in the client process, but in the resource-specific subcomponent). The new macros are supposed to be less likely to clash with other names, hence the new names.
Diffstat (limited to 'common/log.cpp')
-rw-r--r--common/log.cpp45
1 files changed, 25 insertions, 20 deletions
diff --git a/common/log.cpp b/common/log.cpp
index 83cdc8a..821df06 100644
--- a/common/log.cpp
+++ b/common/log.cpp
@@ -238,27 +238,34 @@ static bool caseInsensitiveContains(const QByteArray &pattern, const QByteArrayL
238 return false; 238 return false;
239} 239}
240 240
241QDebug Sink::Log::debugStream(DebugLevel debugLevel, int line, const char *file, const char *function, const char *debugArea) 241QDebug Sink::Log::debugStream(DebugLevel debugLevel, int line, const char *file, const char *function, const char *debugArea, const char *debugComponent)
242{ 242{
243 static NullStream nullstream; 243 static NullStream nullstream;
244 if (debugLevel < debugOutputLevel()) { 244 if (debugLevel < debugOutputLevel()) {
245 return QDebug(&nullstream); 245 return QDebug(&nullstream);
246 } 246 }
247 247
248 auto areas = debugOutputFilter(Sink::Log::Area); 248 if (sPrimaryComponent.isEmpty()) {
249 if (debugArea && !areas.isEmpty()) { 249 sPrimaryComponent = getProgramName();
250 if (!containsItemStartingWith(debugArea, areas)) {
251 return QDebug(&nullstream);
252 }
253 } 250 }
254 static QByteArray programName = getProgramName(); 251 QString fullDebugArea = sPrimaryComponent + "."+ QString::fromLatin1(debugComponent) + "." + QString::fromLatin1(debugArea);
255 252
256 auto filter = debugOutputFilter(Sink::Log::ApplicationName); 253 //TODO add to autocompletion
257 if (!filter.isEmpty() && !filter.contains(programName)) { 254
258 if (!containsItemStartingWith(programName, filter)) { 255 auto areas = debugOutputFilter(Sink::Log::Area);
256 if (!areas.isEmpty()) {
257 if (!containsItemStartingWith(fullDebugArea.toUtf8(), areas)) {
259 return QDebug(&nullstream); 258 return QDebug(&nullstream);
260 } 259 }
261 } 260 }
261 // static QByteArray programName = getProgramName();
262 //
263 // auto filter = debugOutputFilter(Sink::Log::ApplicationName);
264 // if (!filter.isEmpty() && !filter.contains(programName)) {
265 // if (!containsItemStartingWith(programName, filter)) {
266 // return QDebug(&nullstream);
267 // }
268 // }
262 269
263 QString prefix; 270 QString prefix;
264 int prefixColorCode = ANSI_Colors::DoNothing; 271 int prefixColorCode = ANSI_Colors::DoNothing;
@@ -299,19 +306,17 @@ QDebug Sink::Log::debugStream(DebugLevel debugLevel, int line, const char *file,
299 } 306 }
300 if (showProgram) { 307 if (showProgram) {
301 int width = 10; 308 int width = 10;
302 output += QString(" %1(%2)").arg(QString::fromLatin1(programName).leftJustified(width, ' ', true)).arg(unsigned(getpid())).rightJustified(width + 8, ' '); 309 output += QString(" %1(%2)").arg(QString::fromLatin1(getProgramName()).leftJustified(width, ' ', true)).arg(unsigned(getpid())).rightJustified(width + 8, ' ');
303 } 310 }
304 if (debugArea) { 311 if (useColor) {
305 if (useColor) { 312 output += colorCommand(QList<int>() << ANSI_Colors::Bold << prefixColorCode);
306 output += colorCommand(QList<int>() << ANSI_Colors::Bold << prefixColorCode); 313 }
307 } 314 output += QString(" %1 ").arg(fullDebugArea.leftJustified(25, ' ', true));
308 output += QString(" %1 ").arg(QString::fromLatin1(debugArea).leftJustified(25, ' ', true)); 315 if (useColor) {
309 if (useColor) { 316 output += resetColor;
310 output += resetColor;
311 }
312 } 317 }
313 if (showFunction) { 318 if (showFunction) {
314 output += QString(" %3").arg(QString::fromLatin1(function).leftJustified(25, ' ', true)); 319 output += QString(" %3").arg(fullDebugArea.leftJustified(25, ' ', true));
315 } 320 }
316 if (showLocation) { 321 if (showLocation) {
317 const auto filename = QString::fromLatin1(file).split('/').last(); 322 const auto filename = QString::fromLatin1(file).split('/').last();