From 496b638a885ef34cf66fe541e925aa61cef37b59 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 26 Apr 2018 14:31:31 -0700 Subject: [PATCH 1/3] Fix log file directory not being capped at 50MB --- libraries/shared/src/shared/FileLogger.cpp | 35 +++++++++++----------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/libraries/shared/src/shared/FileLogger.cpp b/libraries/shared/src/shared/FileLogger.cpp index 8ceb378574..4f4a9ab6dd 100644 --- a/libraries/shared/src/shared/FileLogger.cpp +++ b/libraries/shared/src/shared/FileLogger.cpp @@ -36,17 +36,15 @@ protected: private: const FileLogger& _logger; QMutex _fileMutex; - uint64_t _lastRollTime; + std::chrono::system_clock::time_point _lastRollTime; }; - - static const QString FILENAME_FORMAT = "hifi-log_%1%2.txt"; static const QString DATETIME_FORMAT = "yyyy-MM-dd_hh.mm.ss"; static const QString LOGS_DIRECTORY = "Logs"; -static const QString IPADDR_WILDCARD = "[0-9]*.[0-9]*.[0-9]*.[0-9]*"; -static const QString DATETIME_WILDCARD = "20[0-9][0-9]-[0,1][0-9]-[0-3][0-9]_[0-2][0-9].[0-6][0-9].[0-6][0-9]"; -static const QString FILENAME_WILDCARD = "hifi-log_" + IPADDR_WILDCARD + "_" + DATETIME_WILDCARD + ".txt"; +static const QString DATETIME_WILDCARD = "20[0-9][0-9]-[01][0-9]-[0-3][0-9]_[0-2][0-9]\\.[0-6][0-9]\\.[0-6][0-9]"; +static const QString SESSION_WILDCARD = "[0-9a-z]{8}(-[0-9a-z]{4}){3}-[0-9a-z]{12}"; +static QRegExp LOG_FILENAME_REGEX { "hifi-log_" + DATETIME_WILDCARD + "(_" + SESSION_WILDCARD + ")?\.txt" }; static QUuid SESSION_ID; // Max log size is 512 KB. We send log files to our crash reporter, so we want to keep this relatively @@ -104,20 +102,21 @@ void FilePersistThread::rollFileIfNecessary(QFile& file, bool notifyListenersIfR _lastRollTime = now; } - QStringList nameFilters; - nameFilters << FILENAME_WILDCARD; - QDir logQDir(FileUtils::standardPath(LOGS_DIRECTORY)); - logQDir.setNameFilters(nameFilters); - logQDir.setSorting(QDir::Time); - QFileInfoList filesInDir = logQDir.entryInfoList(); + QDir logDir(FileUtils::standardPath(LOGS_DIRECTORY)); + logDir.setSorting(QDir::Time); + logDir.setFilter(QDir::Files); qint64 totalSizeOfDir = 0; - foreach(QFileInfo dirItm, filesInDir){ - if (totalSizeOfDir < MAX_LOG_DIR_SIZE){ - totalSizeOfDir += dirItm.size(); - } else { - QFile file(dirItm.filePath()); - file.remove(); + QFileInfoList filesInDir = logDir.entryInfoList(); + for (auto& fileInfo : filesInDir) { + if (!LOG_FILENAME_REGEX.exactMatch(fileInfo.fileName())) { + continue; + } + totalSizeOfDir += fileInfo.size(); + if (totalSizeOfDir > MAX_LOG_DIR_SIZE){ + qDebug() << "Removing log file: " << fileInfo.fileName(); + QFile oldLogFile(fileInfo.filePath()); + oldLogFile.remove(); } } } From 73cea112eefa7541a05394426f74e0652cb07efb Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 26 Apr 2018 15:49:34 -0700 Subject: [PATCH 2/3] Update FilePersistThread to use std::chrono instead of usecTimestampNow --- libraries/shared/src/shared/FileLogger.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/libraries/shared/src/shared/FileLogger.cpp b/libraries/shared/src/shared/FileLogger.cpp index 4f4a9ab6dd..1e17ee9e7c 100644 --- a/libraries/shared/src/shared/FileLogger.cpp +++ b/libraries/shared/src/shared/FileLogger.cpp @@ -44,7 +44,7 @@ static const QString DATETIME_FORMAT = "yyyy-MM-dd_hh.mm.ss"; static const QString LOGS_DIRECTORY = "Logs"; static const QString DATETIME_WILDCARD = "20[0-9][0-9]-[01][0-9]-[0-3][0-9]_[0-2][0-9]\\.[0-6][0-9]\\.[0-6][0-9]"; static const QString SESSION_WILDCARD = "[0-9a-z]{8}(-[0-9a-z]{4}){3}-[0-9a-z]{12}"; -static QRegExp LOG_FILENAME_REGEX { "hifi-log_" + DATETIME_WILDCARD + "(_" + SESSION_WILDCARD + ")?\.txt" }; +static QRegExp LOG_FILENAME_REGEX { "hifi-log_" + DATETIME_WILDCARD + "(_" + SESSION_WILDCARD + ")?\\.txt" }; static QUuid SESSION_ID; // Max log size is 512 KB. We send log files to our crash reporter, so we want to keep this relatively @@ -52,8 +52,7 @@ static QUuid SESSION_ID; static const qint64 MAX_LOG_SIZE = 512 * 1024; // Max log files found in the log directory is 100. static const qint64 MAX_LOG_DIR_SIZE = 512 * 1024 * 100; -// Max log age is 1 hour -static const uint64_t MAX_LOG_AGE_USECS = USECS_PER_SECOND * 3600; +static const std::chrono::minutes MAX_LOG_AGE { 60 }; static FilePersistThread* _persistThreadInstance; @@ -84,23 +83,22 @@ FilePersistThread::FilePersistThread(const FileLogger& logger) : _logger(logger) if (file.exists()) { rollFileIfNecessary(file, false); } - _lastRollTime = usecTimestampNow(); + _lastRollTime = std::chrono::system_clock::now(); } void FilePersistThread::rollFileIfNecessary(QFile& file, bool notifyListenersIfRolled) { - uint64_t now = usecTimestampNow(); - if ((file.size() > MAX_LOG_SIZE) || (now - _lastRollTime) > MAX_LOG_AGE_USECS) { + auto now = std::chrono::system_clock::now(); + if ((file.size() > MAX_LOG_SIZE) || (now - _lastRollTime) > MAX_LOG_AGE) { QString newFileName = getLogRollerFilename(); if (file.copy(newFileName)) { file.open(QIODevice::WriteOnly | QIODevice::Truncate); file.close(); - qCDebug(shared) << "Rolled log file:" << newFileName; if (notifyListenersIfRolled) { emit rollingLogFile(newFileName); } - _lastRollTime = now; + _lastRollTime = std::chrono::system_clock::now(); } QDir logDir(FileUtils::standardPath(LOGS_DIRECTORY)); @@ -128,7 +126,7 @@ bool FilePersistThread::processQueueItems(const Queue& messages) { rollFileIfNecessary(file); if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) { QTextStream out(&file); - foreach(const QString& message, messages) { + for (const QString& message : messages) { out << message; } } From b29984ab2c8f7efec889c001db5efe58bfeed161 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 1 May 2018 16:52:47 -0700 Subject: [PATCH 3/3] Remove max log age for rolling interface log --- libraries/shared/src/shared/FileLogger.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/libraries/shared/src/shared/FileLogger.cpp b/libraries/shared/src/shared/FileLogger.cpp index 1e17ee9e7c..6a10629ee5 100644 --- a/libraries/shared/src/shared/FileLogger.cpp +++ b/libraries/shared/src/shared/FileLogger.cpp @@ -36,7 +36,6 @@ protected: private: const FileLogger& _logger; QMutex _fileMutex; - std::chrono::system_clock::time_point _lastRollTime; }; static const QString FILENAME_FORMAT = "hifi-log_%1%2.txt"; @@ -52,7 +51,6 @@ static QUuid SESSION_ID; static const qint64 MAX_LOG_SIZE = 512 * 1024; // Max log files found in the log directory is 100. static const qint64 MAX_LOG_DIR_SIZE = 512 * 1024 * 100; -static const std::chrono::minutes MAX_LOG_AGE { 60 }; static FilePersistThread* _persistThreadInstance; @@ -83,12 +81,10 @@ FilePersistThread::FilePersistThread(const FileLogger& logger) : _logger(logger) if (file.exists()) { rollFileIfNecessary(file, false); } - _lastRollTime = std::chrono::system_clock::now(); } void FilePersistThread::rollFileIfNecessary(QFile& file, bool notifyListenersIfRolled) { - auto now = std::chrono::system_clock::now(); - if ((file.size() > MAX_LOG_SIZE) || (now - _lastRollTime) > MAX_LOG_AGE) { + if (file.size() > MAX_LOG_SIZE) { QString newFileName = getLogRollerFilename(); if (file.copy(newFileName)) { file.open(QIODevice::WriteOnly | QIODevice::Truncate); @@ -97,8 +93,6 @@ void FilePersistThread::rollFileIfNecessary(QFile& file, bool notifyListenersIfR if (notifyListenersIfRolled) { emit rollingLogFile(newFileName); } - - _lastRollTime = std::chrono::system_clock::now(); } QDir logDir(FileUtils::standardPath(LOGS_DIRECTORY));