Przeglądaj źródła

Logging: Dump all logs in the queue on close in debug mode

James Rowe 8 lat temu
rodzic
commit
497b81558e

+ 2 - 1
src/common/logging/backend.cpp

@@ -5,6 +5,7 @@
 #include <algorithm>
 #include <algorithm>
 #include <array>
 #include <array>
 #include <chrono>
 #include <chrono>
+#include <climits>
 #include <condition_variable>
 #include <condition_variable>
 #include <memory>
 #include <memory>
 #include <thread>
 #include <thread>
@@ -94,7 +95,7 @@ private:
             }
             }
             // Drain the logging queue. Only writes out up to MAX_LOGS_TO_WRITE to prevent a case
             // Drain the logging queue. Only writes out up to MAX_LOGS_TO_WRITE to prevent a case
             // where a system is repeatedly spamming logs even on close.
             // where a system is repeatedly spamming logs even on close.
-            constexpr int MAX_LOGS_TO_WRITE = 100;
+            const int MAX_LOGS_TO_WRITE = filter.IsDebug() ? INT_MAX : 100;
             int logs_written = 0;
             int logs_written = 0;
             while (logs_written++ < MAX_LOGS_TO_WRITE && message_queue.Pop(entry)) {
             while (logs_written++ < MAX_LOGS_TO_WRITE && message_queue.Pop(entry)) {
                 write_logs(entry);
                 write_logs(entry);

+ 7 - 0
src/common/logging/filter.cpp

@@ -94,4 +94,11 @@ bool Filter::ParseFilterRule(const std::string::const_iterator begin,
 bool Filter::CheckMessage(Class log_class, Level level) const {
 bool Filter::CheckMessage(Class log_class, Level level) const {
     return static_cast<u8>(level) >= static_cast<u8>(class_levels[static_cast<size_t>(log_class)]);
     return static_cast<u8>(level) >= static_cast<u8>(class_levels[static_cast<size_t>(log_class)]);
 }
 }
+
+bool Filter::IsDebug() const {
+    return std::any_of(class_levels.begin(), class_levels.end(), [](const Level& l) {
+        return static_cast<u8>(l) <= static_cast<u8>(Level::Debug);
+    });
+}
+
 } // namespace Log
 } // namespace Log

+ 3 - 0
src/common/logging/filter.h

@@ -47,6 +47,9 @@ public:
     /// Matches class/level combination against the filter, returning true if it passed.
     /// Matches class/level combination against the filter, returning true if it passed.
     bool CheckMessage(Class log_class, Level level) const;
     bool CheckMessage(Class log_class, Level level) const;
 
 
+    /// Returns true if any logging classes are set to debug
+    bool IsDebug() const;
+
 private:
 private:
     std::array<Level, (size_t)Class::Count> class_levels;
     std::array<Level, (size_t)Class::Count> class_levels;
 };
 };