25 Q_MOC_INCLUDE(
"LogModel.h")
43 [[nodiscard]]
bool hasError()
const {
return _ioError; }
45 [[nodiscard]] QString
lastError()
const {
return _lastError; }
49 [[nodiscard]] QString
logDirectory()
const {
return _logDirectory; }
53 Q_INVOKABLE
void flush();
57 [[nodiscard]]
static QList<LogEntry>
capturedMessages(
const QString& category = {});
62 static void captureIfEnabled(QtMsgType type,
const QMessageLogContext& context,
const QString& msg);
71 void _handleEntry(
const LogEntry& entry);
75 explicit LogManager(QObject* parent =
nullptr);
77 static void msgHandler(QtMsgType type,
const QMessageLogContext& context,
const QString& msg);
78 void log(QtMsgType type,
const QMessageLogContext& context,
const QString& message);
79 static LogEntry buildEntry(QtMsgType type,
const QMessageLogContext& context,
const QString& message);
81 void _dispatchToSinks(
const LogEntry& entry);
82 void _replayEarlyEntries();
83 void _setDiskLoggingEnabled(
bool enabled);
85 void _setIoError(
const QString& message);
86 void _exportEntries(QList<LogEntry> entries,
const QString& destFile);
87 const QString& _internCategory(
const QString& category);
92 qint64 lastRefillMs = 0;
97 bool _rateLimitCheck(
const LogEntry& entry);
98 void _emitSuppressedSummary(
const QString& category,
int count);
103 QFuture<void> _exportFuture;
105 QList<LogEntry> _pendingDiskWrites;
106 QSet<QString> _internedCategories;
107 QHash<QString, RateBucket> _rateBuckets;
108 QString _logDirectory;
109 bool _ioError =
false;
111 bool _initialized =
false;
112 bool _diskLoggingEnabled =
false;
113 bool _rateLimitingEnabled =
false;
114 int _maxLogFileSize = 10 * 1024 * 1024;
115 int _maxBackupFiles = 5;
117 static constexpr int kFlushIntervalMSecs = 1000;
118 static constexpr int kRateTokensPerSecond = 100;
119 static constexpr int kRateMaxTokens = 200;