diff options
Diffstat (limited to 'common/log.cpp')
-rw-r--r-- | common/log.cpp | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/common/log.cpp b/common/log.cpp index d1a3a37..5dfb872 100644 --- a/common/log.cpp +++ b/common/log.cpp | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <atomic> | 14 | #include <atomic> |
15 | #include <definitions.h> | 15 | #include <definitions.h> |
16 | #include <QThreadStorage> | 16 | #include <QThreadStorage> |
17 | #include <QStringBuilder> | ||
17 | 18 | ||
18 | using namespace Sink::Log; | 19 | using namespace Sink::Log; |
19 | 20 | ||
@@ -315,13 +316,24 @@ static QByteArray getFileName(const char *file) | |||
315 | return filename.split('.').first(); | 316 | return filename.split('.').first(); |
316 | } | 317 | } |
317 | 318 | ||
318 | bool isFiltered(DebugLevel debugLevel, const QByteArray &fullDebugArea) | 319 | static QString assembleDebugArea(const char *debugArea, const char *debugComponent, const char *file) |
320 | { | ||
321 | if (sPrimaryComponent.isEmpty()) { | ||
322 | sPrimaryComponent = getProgramName(); | ||
323 | } | ||
324 | //Using stringbuilder for fewer allocations | ||
325 | return QLatin1String{sPrimaryComponent} % QLatin1String{"."} % | ||
326 | (debugComponent ? (QLatin1String{debugComponent} + QLatin1String{"."}) : QLatin1String{""}) % | ||
327 | (debugArea ? QLatin1String{debugArea} : QLatin1String{getFileName(file)}); | ||
328 | } | ||
329 | |||
330 | static bool isFiltered(DebugLevel debugLevel, const QByteArray &fullDebugArea) | ||
319 | { | 331 | { |
320 | if (debugLevel < debugOutputLevel()) { | 332 | if (debugLevel < debugOutputLevel()) { |
321 | return true; | 333 | return true; |
322 | } | 334 | } |
323 | auto areas = debugOutputFilter(Sink::Log::Area); | 335 | const auto areas = debugOutputFilter(Sink::Log::Area); |
324 | if (debugLevel <= Sink::Log::Trace && !areas.isEmpty()) { | 336 | if ((debugLevel <= Sink::Log::Trace) && !areas.isEmpty()) { |
325 | if (!containsItemStartingWith(fullDebugArea, areas)) { | 337 | if (!containsItemStartingWith(fullDebugArea, areas)) { |
326 | return true; | 338 | return true; |
327 | } | 339 | } |
@@ -329,19 +341,18 @@ bool isFiltered(DebugLevel debugLevel, const QByteArray &fullDebugArea) | |||
329 | return false; | 341 | return false; |
330 | } | 342 | } |
331 | 343 | ||
332 | QDebug Sink::Log::debugStream(DebugLevel debugLevel, int line, const char *file, const char *function, const char *debugArea, const char *debugComponent) | 344 | bool Sink::Log::isFiltered(DebugLevel debugLevel, const char *debugArea, const char *debugComponent, const char *file) |
333 | { | 345 | { |
334 | if (sPrimaryComponent.isEmpty()) { | 346 | return isFiltered(debugLevel, assembleDebugArea(debugArea, debugComponent, file).toLatin1()); |
335 | sPrimaryComponent = getProgramName(); | 347 | } |
336 | } | ||
337 | const QByteArray fullDebugArea = sPrimaryComponent + "." + | ||
338 | (debugComponent ? (QByteArray{debugComponent} + ".") : "") + | ||
339 | (debugArea ? QByteArray{debugArea} : getFileName(file)); | ||
340 | 348 | ||
349 | QDebug Sink::Log::debugStream(DebugLevel debugLevel, int line, const char *file, const char *function, const char *debugArea, const char *debugComponent) | ||
350 | { | ||
351 | const auto fullDebugArea = assembleDebugArea(debugArea, debugComponent, file); | ||
341 | collectDebugArea(fullDebugArea); | 352 | collectDebugArea(fullDebugArea); |
342 | 353 | ||
343 | static NullStream nullstream; | 354 | static NullStream nullstream; |
344 | if (isFiltered(debugLevel, fullDebugArea)) { | 355 | if (isFiltered(debugLevel, fullDebugArea.toLatin1())) { |
345 | return QDebug(&nullstream); | 356 | return QDebug(&nullstream); |
346 | } | 357 | } |
347 | 358 | ||
@@ -391,12 +402,12 @@ QDebug Sink::Log::debugStream(DebugLevel debugLevel, int line, const char *file, | |||
391 | } | 402 | } |
392 | static std::atomic<int> maxDebugAreaSize{25}; | 403 | static std::atomic<int> maxDebugAreaSize{25}; |
393 | maxDebugAreaSize = qMax(fullDebugArea.size(), maxDebugAreaSize.load()); | 404 | maxDebugAreaSize = qMax(fullDebugArea.size(), maxDebugAreaSize.load()); |
394 | output += QString(" %1 ").arg(QString{fullDebugArea}.leftJustified(maxDebugAreaSize, ' ', false)); | 405 | output += QString(" %1 ").arg(fullDebugArea.leftJustified(maxDebugAreaSize, ' ', false)); |
395 | if (useColor) { | 406 | if (useColor) { |
396 | output += resetColor; | 407 | output += resetColor; |
397 | } | 408 | } |
398 | if (showFunction) { | 409 | if (showFunction) { |
399 | output += QString(" %3").arg(QString{fullDebugArea}.leftJustified(25, ' ', true)); | 410 | output += QString(" %3").arg(fullDebugArea.leftJustified(25, ' ', true)); |
400 | } | 411 | } |
401 | if (showLocation) { | 412 | if (showLocation) { |
402 | const auto filename = QString::fromLatin1(file).split('/').last(); | 413 | const auto filename = QString::fromLatin1(file).split('/').last(); |