Skip to content

Commit

Permalink
write logs related to audio plugins registration to a separate file (…
Browse files Browse the repository at this point in the history
…to avoid creating a lot of log files)
  • Loading branch information
RomanPudashkin committed Jul 4, 2023
1 parent 9904fcb commit ad004b3
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 20 deletions.
26 changes: 20 additions & 6 deletions src/framework/global/globalmodule.cpp
Expand Up @@ -90,13 +90,27 @@ void GlobalModule::onPreInit(const IApplication::RunMode& mode)
io::path_t logPath = m_configuration->userAppDataPath() + "/logs";
fileSystem()->makePath(logPath);

//! Remove old logs
LogRemover::removeLogs(logPath, 7, u"MuseScore_yyMMdd_HHmmss.log");
io::path_t logFilePath = logPath;
String logFileNamePattern;

if (mode == IApplication::RunMode::AudioPluginRegistration) {
logFileNamePattern = u"audiopluginregistration_yyMMdd.log";

//! This creates a file named "data/logs/audiopluginregistration_yyMMdd.log"
logFilePath += "/audiopluginregistration_"
+ QDateTime::currentDateTime().toString("yyMMdd")
+ ".log";
} else {
logFileNamePattern = u"MuseScore_yyMMdd_HHmmss.log";

//! File, this creates a file named "data/logs/MuseScore_yyMMdd_HHmmss.log"
io::path_t logFilePath = logPath + "/MuseScore_"
+ QDateTime::currentDateTime().toString("yyMMdd_HHmmss")
+ ".log";
//! This creates a file named "data/logs/MuseScore_yyMMdd_HHmmss.log"
logFilePath += "/MuseScore_"
+ QDateTime::currentDateTime().toString("yyMMdd_HHmmss")
+ ".log";
}

//! Remove old logs
LogRemover::removeLogs(logPath, 7, logFileNamePattern);

FileLogDest* logFile = new FileLogDest(logFilePath.toStdString(),
LogLayout("${datetime} | ${type|5} | ${thread} | ${tag|10} | ${message}"));
Expand Down
17 changes: 8 additions & 9 deletions src/framework/global/logremover.cpp
Expand Up @@ -32,7 +32,7 @@ void LogRemover::removeLogs(const io::path_t& logsDir, int olderThanDays, const
{
//! NOTE If the pattern changes,
//! then we need to change the implementation of `scanDir` and `parseDate` functions.
IF_ASSERT_FAILED(pattern == u"MuseScore_yyMMdd_HHmmss.log") {
IF_ASSERT_FAILED(pattern.endsWith(u"_yyMMdd.log") || pattern.endsWith(u"_yyMMdd_HHmmss.log")) {
return;
}

Expand All @@ -43,7 +43,7 @@ void LogRemover::removeLogs(const io::path_t& logsDir, int olderThanDays, const

io::paths_t toRemoveFiles;
for (const io::path_t& file : files) {
Date date = parseDate(file.toString());
Date date = parseDate(io::filename(file).toString());
if (date.isNull()) {
continue;
}
Expand All @@ -59,34 +59,33 @@ void LogRemover::removeLogs(const io::path_t& logsDir, int olderThanDays, const

mu::Date LogRemover::parseDate(const String& fileName)
{
size_t endIdx = fileName.lastIndexOf(u'_');
if (endIdx == mu::nidx) {
size_t dateStartIdx = fileName.indexOf(u'_');
if (dateStartIdx == mu::nidx) {
return Date();
}

size_t startIdx = fileName.lastIndexOf(u'_', endIdx - 1);
if (startIdx == mu::nidx) {
return Date();
}
String dateStr = fileName.mid(dateStartIdx + 1, fileName.size() - 1);

String dateStr = fileName.mid(startIdx + 1, (endIdx - startIdx - 1));
// "yyMMdd"
String yy = dateStr.mid(0, 2);
bool ok = false;
int y = yy.toInt(&ok);
if (!ok || !(y > 0)) {
return Date();
}

String mm = dateStr.mid(2, 2);
int m = mm.toInt(&ok);
if (!ok || !(m > 0 && m <= 12)) {
return Date();
}

String dd = dateStr.mid(4, 2);
int d = dd.toInt(&ok);
if (!ok || !(d > 0 && d <= 31)) {
return Date();
}

Date date(2000 + y, m, d);
return date;
}
Expand Down
21 changes: 16 additions & 5 deletions src/framework/global/tests/logremover_tests.cpp
Expand Up @@ -32,10 +32,21 @@ class Global_LogRemoverTests : public ::testing::Test

TEST_F(Global_LogRemoverTests, ParseDate)
{
EXPECT_EQ(LogRemover::parseDate(u"path/to/logs/MuseScore_210629_154033.log"), Date(2021, 6, 29));
EXPECT_EQ(LogRemover::parseDate(u"path/to_to/logs/MuseScore_210709_154033.log"), Date(2021, 7, 9));
EXPECT_EQ(LogRemover::parseDate(u"path/to/logs/MuseScore_210709__154033.log"), Date());
EXPECT_EQ(LogRemover::parseDate(u"path/to/logs/MuseScore_210709_154033_.log"), Date());
EXPECT_EQ(LogRemover::parseDate(u"path/to/logs/MuseScore_210709_154033-.log"), Date(2021, 7, 9));
// Correct name format: *_yyMMdd*
EXPECT_EQ(LogRemover::parseDate(u"MuseScore_210229_154033.log"), Date(2021, 2, 29));
EXPECT_EQ(LogRemover::parseDate(u"MuseScore_390910_154033"), Date(2039, 9, 10));
EXPECT_EQ(LogRemover::parseDate(u"MuseScore_290910-_154033__"), Date(2029, 9, 10));
EXPECT_EQ(LogRemover::parseDate(u"audiopluginregistration_230615.log"), Date(2023, 6, 15));

// Incorrect name format: missing _ or wrong position
EXPECT_EQ(LogRemover::parseDate(u"MuseScore210229154033.log"), Date());
EXPECT_EQ(LogRemover::parseDate(u"MuseScore210229154033_.log"), Date());
EXPECT_EQ(LogRemover::parseDate(u"_MuseScore_210229_154033.log"), Date());

// Incorrect name format: missing/wrong date
EXPECT_EQ(LogRemover::parseDate(u"MuseScore_"), Date());
EXPECT_EQ(LogRemover::parseDate(u"MuseScore_00229_154033"), Date()); // wrong year
EXPECT_EQ(LogRemover::parseDate(u"MuseScore_219929_154033.log"), Date()); // wrong month
EXPECT_EQ(LogRemover::parseDate(u"MuseScore_210299_154033.log"), Date()); // wrong day
}
}

0 comments on commit ad004b3

Please sign in to comment.