Skip to content

Commit

Permalink
feat: keep up to 20 log files instead of one
Browse files Browse the repository at this point in the history
  • Loading branch information
Bionus committed Nov 25, 2023
1 parent fdf4514 commit 0644ccc
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 3 deletions.
5 changes: 4 additions & 1 deletion src/cli/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
#include <QSettings>
#include <QString>
#include <QStringList>
#include "cli.h"
#include "functions.h"
#include "logger.h"
#include "models/profile.h"
#include "cli.h"


int main(int argc, char *argv[])
Expand All @@ -17,6 +18,8 @@ int main(int argc, char *argv[])
app.setOrganizationDomain("bionus.fr.cr");
QSettings::setDefaultFormat(QSettings::IniFormat);

Logger::getInstance().initialize();

auto *profile = new Profile(savePath());
profile->purgeTemp(24 * 60 * 60);

Expand Down
5 changes: 3 additions & 2 deletions src/e2e/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ int main(int argc, char *argv[])
{
const QCoreApplication app(argc, argv);

Logger::getInstance().initialize();
Logger::getInstance().setLogLevel(Logger::Warning);

QCommandLineParser parser;
parser.addHelpOption();

Expand All @@ -60,8 +63,6 @@ int main(int argc, char *argv[])
parser.addOption(outputOption);
parser.process(app);

Logger::getInstance().setLogLevel(Logger::Warning);

QFile f(parser.value(inputOption));
if (!f.open(QFile::ReadOnly | QFile::Text)) {
return 1;
Expand Down
3 changes: 3 additions & 0 deletions src/gui-qml/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "loaders/gallery-search-loader.h"
#include "loaders/image-loader.h"
#include "loaders/tag-search-loader.h"
#include "logger.h"
#include "main-screen.h"
#include "models/image.h"
#include "models/profile.h"
Expand Down Expand Up @@ -50,6 +51,8 @@ int main(int argc, char *argv[])
app.setOrganizationName("Bionus");
app.setOrganizationDomain("bionus.fr.cr");

Logger::getInstance().initialize();

qmlRegisterType<StatusBar>("StatusBar", 0, 1, "StatusBar");
qmlRegisterType<SyntaxHighlighterHelper>("Grabber", 1, 0, "SyntaxHighlighterHelper");
qmlRegisterType<GallerySearchLoader>("Grabber", 1, 0, "GallerySearchLoader");
Expand Down
3 changes: 3 additions & 0 deletions src/gui/src/main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "analytics.h"
#include "cli.h"
#include "functions.h"
#include "logger.h"
#include "main-window.h"
#include "models/page-api.h"
#include "models/profile.h"
Expand Down Expand Up @@ -74,6 +75,8 @@ int main(int argc, char *argv[])
app.setOrganizationDomain("bionus.fr.cr");
QSettings::setDefaultFormat(QSettings::IniFormat);

Logger::getInstance().initialize();

// Handler for custom URL protocols, redirecting to the main program through HTTP calls
if (argc == 3 && QString(argv[1]) == "--url-protocol") {
QNetworkAccessManager manager;
Expand Down
27 changes: 27 additions & 0 deletions src/lib/src/logger.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "logger.h"
#include <QDateTime>
#include <QDir>
#include <QFile>
#include <QStringList>
#include <stdexcept>
Expand All @@ -9,6 +10,31 @@
#include <QDebug>
#endif


void Logger::initialize()
{
// Create the "logs/" directory if it doesn't exist
const QDir logsDirectory = savePath(QStringLiteral("logs/"), false, true);
if (!logsDirectory.exists()) {
logsDirectory.mkpath(".");
}

// Clean-up old log files if we have too many
const QFileInfoList list = logsDirectory.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks, QDir::Time | QDir::Reversed);
if (list.count() > MAX_LOG_FILES) {
for (int i = 0; i < (list.count() - MAX_LOG_FILES); i++) {
QFile::remove(list[i].absoluteFilePath());
}
}

// Generate a new file for each run
const QString logFilename = QString("main_%1-%2.log")
.arg(QDate::currentDate().toString("yyyy.MM.dd"))
.arg(QTime::currentTime().toString("hh.mm.ss.zzz"));
setLogFile(logsDirectory.filePath(logFilename));
}


void Logger::logToConsole()
{
if (m_logFile.isOpen()) {
Expand Down Expand Up @@ -94,6 +120,7 @@ void Logger::log(const QString &l, LogLevel level)
return;
}

// Fallback to "main.log" if no log file is open
if (!m_logFile.isOpen()) {
setLogFile(savePath(QStringLiteral("main.log"), false, true));
}
Expand Down
3 changes: 3 additions & 0 deletions src/lib/src/logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include <QFile>
#include <QObject>

#define MAX_LOG_FILES 20


class QString;

Expand Down Expand Up @@ -37,6 +39,7 @@ class Logger : public QObject
static void noMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &message);
static void setupMessageOutput(bool log);

void initialize();
void setExitOnError(bool val);
void setLogFile(const QString &path);
void setLogLevel(LogLevel level);
Expand Down

0 comments on commit 0644ccc

Please sign in to comment.