mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 23:36:44 +02:00
Use a constant log file and rollover accumulated logs to a new file based on startup, time or size
This commit is contained in:
parent
25673831c2
commit
70ffe10057
2 changed files with 49 additions and 15 deletions
|
@ -10,16 +10,39 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "FileLogger.h"
|
#include "FileLogger.h"
|
||||||
#include "HifiSockAddr.h"
|
|
||||||
#include <FileUtils.h>
|
|
||||||
#include <QDateTime>
|
|
||||||
#include <QFile>
|
|
||||||
#include <QDir>
|
|
||||||
#include <QDesktopServices>
|
|
||||||
|
|
||||||
const QString FILENAME_FORMAT = "hifi-log_%1_%2.txt";
|
#include <QtCore/QDateTime>
|
||||||
const QString DATETIME_FORMAT = "yyyy-MM-dd_hh.mm.ss";
|
#include <QtCore/QFile>
|
||||||
const QString LOGS_DIRECTORY = "Logs";
|
#include <QtCore/QDir>
|
||||||
|
#include <QtGui/QDesktopServices>
|
||||||
|
|
||||||
|
#include <NumericalConstants.h>
|
||||||
|
#include <FileUtils.h>
|
||||||
|
#include <SharedUtil.h>
|
||||||
|
|
||||||
|
#include "HifiSockAddr.h"
|
||||||
|
|
||||||
|
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";
|
||||||
|
// Max log size is 1 MB
|
||||||
|
static const uint64_t MAX_LOG_SIZE = 1024 * 1024;
|
||||||
|
// Max log age is 1 hour
|
||||||
|
static const uint64_t MAX_LOG_AGE_USECS = USECS_PER_SECOND * 3600;
|
||||||
|
|
||||||
|
QString getLogRollerFilename() {
|
||||||
|
QString result = FileUtils::standardPath(LOGS_DIRECTORY);
|
||||||
|
QHostAddress clientAddress = getLocalAddress();
|
||||||
|
QDateTime now = QDateTime::currentDateTime();
|
||||||
|
result.append(QString(FILENAME_FORMAT).arg(clientAddress.toString(), now.toString(DATETIME_FORMAT)));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString& getLogFilename() {
|
||||||
|
static QString fileName = FileUtils::standardPath(LOGS_DIRECTORY) + "hifi-log.txt";
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class FilePersistThread : public GenericQueueThread < QString > {
|
class FilePersistThread : public GenericQueueThread < QString > {
|
||||||
public:
|
public:
|
||||||
|
@ -28,8 +51,22 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void rollFileIfNecessary(QFile& file) {
|
||||||
|
uint64_t now = usecTimestampNow();
|
||||||
|
if ((file.size() > MAX_LOG_SIZE) || (now - _lastRollTime) > MAX_LOG_AGE_USECS) {
|
||||||
|
QString newFileName = getLogRollerFilename();
|
||||||
|
if (file.copy(newFileName)) {
|
||||||
|
_lastRollTime = now;
|
||||||
|
file.open(QIODevice::WriteOnly | QIODevice::Truncate);
|
||||||
|
file.close();
|
||||||
|
qDebug() << "Rolled log file: " << newFileName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool processQueueItems(const Queue& messages) {
|
virtual bool processQueueItems(const Queue& messages) {
|
||||||
QFile file(_logger._fileName);
|
QFile file(_logger._fileName);
|
||||||
|
rollFileIfNecessary(file);
|
||||||
if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {
|
if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {
|
||||||
QTextStream out(&file);
|
QTextStream out(&file);
|
||||||
foreach(const QString& message, messages) {
|
foreach(const QString& message, messages) {
|
||||||
|
@ -40,20 +77,17 @@ protected:
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
const FileLogger& _logger;
|
const FileLogger& _logger;
|
||||||
|
uint64_t _lastRollTime = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
static FilePersistThread* _persistThreadInstance;
|
static FilePersistThread* _persistThreadInstance;
|
||||||
|
|
||||||
FileLogger::FileLogger(QObject* parent) :
|
FileLogger::FileLogger(QObject* parent) :
|
||||||
AbstractLoggerInterface(parent)
|
AbstractLoggerInterface(parent), _fileName(getLogFilename())
|
||||||
{
|
{
|
||||||
_persistThreadInstance = new FilePersistThread(*this);
|
_persistThreadInstance = new FilePersistThread(*this);
|
||||||
_persistThreadInstance->initialize(true, QThread::LowestPriority);
|
_persistThreadInstance->initialize(true, QThread::LowestPriority);
|
||||||
|
|
||||||
_fileName = FileUtils::standardPath(LOGS_DIRECTORY);
|
|
||||||
QHostAddress clientAddress = getLocalAddress();
|
|
||||||
QDateTime now = QDateTime::currentDateTime();
|
|
||||||
_fileName.append(QString(FILENAME_FORMAT).arg(clientAddress.toString(), now.toString(DATETIME_FORMAT)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FileLogger::~FileLogger() {
|
FileLogger::~FileLogger() {
|
||||||
|
|
|
@ -27,7 +27,7 @@ public:
|
||||||
virtual void locateLog() override;
|
virtual void locateLog() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString _fileName;
|
const QString _fileName;
|
||||||
friend class FilePersistThread;
|
friend class FilePersistThread;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue