From 2860650859f611edbfbc9f1de73b848d1a1ba729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gro=C3=9F?= Date: Sun, 9 Jul 2023 21:01:23 +0200 Subject: [PATCH] Truncate logs read by FileLogger --- interface/src/ui/LogDialog.cpp | 3 ++- .../shared/src/shared/AbstractLoggerInterface.h | 2 +- libraries/shared/src/shared/FileLogger.cpp | 15 +++++++++++++-- libraries/shared/src/shared/FileLogger.h | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/interface/src/ui/LogDialog.cpp b/interface/src/ui/LogDialog.cpp index f21b7ab43a..747183b0ec 100644 --- a/interface/src/ui/LogDialog.cpp +++ b/interface/src/ui/LogDialog.cpp @@ -321,7 +321,8 @@ void LogDialog::handleFilterDropdownChanged(int selection) { } QString LogDialog::getCurrentLog() { - return _logger->getLogData(); + // We start 512 KiB from the end of the file. + return _logger->getLogData(524288); } void LogDialog::appendLogLine(QString logLine) { diff --git a/libraries/shared/src/shared/AbstractLoggerInterface.h b/libraries/shared/src/shared/AbstractLoggerInterface.h index f222442df9..d2314cf560 100644 --- a/libraries/shared/src/shared/AbstractLoggerInterface.h +++ b/libraries/shared/src/shared/AbstractLoggerInterface.h @@ -43,7 +43,7 @@ public: inline void setUnknownPrint(bool unknownPrint) { _unknownPrint = unknownPrint; } virtual void addMessage(const QString&) = 0; - virtual QString getLogData() = 0; + virtual QString getLogData(const qint64 maxSize = 0) = 0; virtual void locateLog() = 0; virtual void sync() {} diff --git a/libraries/shared/src/shared/FileLogger.cpp b/libraries/shared/src/shared/FileLogger.cpp index ae206e21b7..d467aed0f8 100644 --- a/libraries/shared/src/shared/FileLogger.cpp +++ b/libraries/shared/src/shared/FileLogger.cpp @@ -157,11 +157,22 @@ void FileLogger::locateLog() { FileUtils::locateFile(_fileName); } -QString FileLogger::getLogData() { +QString FileLogger::getLogData(const qint64 maxSize) { QString result; QFile f(_fileName); if (f.open(QFile::ReadOnly | QFile::Text)) { - result = QTextStream(&f).readAll(); + if (maxSize != 0) { + f.seek(f.size() - maxSize); + } + QTextStream stream(&f); + if (maxSize != 0) { + // Continue one line, in case we are in the middle of a line. + stream.readLine(); + result = "Log has been truncated to " + QString::number(maxSize) + " bytes.\n" + stream.readAll(); + } + else { + result = stream.readAll(); + } } return result; } diff --git a/libraries/shared/src/shared/FileLogger.h b/libraries/shared/src/shared/FileLogger.h index d9d7651147..72ab4bbb37 100644 --- a/libraries/shared/src/shared/FileLogger.h +++ b/libraries/shared/src/shared/FileLogger.h @@ -27,7 +27,7 @@ public: QString getFilename() const { return _fileName; } virtual void addMessage(const QString&) override; virtual void setSessionID(const QUuid&); - virtual QString getLogData() override; + virtual QString getLogData(const qint64 maxSize = 0) override; virtual void locateLog() override; virtual void sync() override;